• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dodawanie long double i int w c++

Object Storage Arubacloud
0 głosów
2,004 wizyt
pytanie zadane 18 grudnia 2016 w C i C++ przez Jan Dobrakowski Użytkownik (580 p.)
Dlaczego w zmiennej typy long double wynik, mieści się tylko tyle danych, ile w zmiennej long long int?

#include <iostream>
#include <iomanip>

using namespace std;
int n, liczba;
long long int suma = 0;
long double wynik = 0;

int main()
{
    cout<<setprecision(10000);
    cin>>n;
    for(int i = 0; i<n; i++){
        cin>>liczba;
        wynik += liczba * n;
        suma += liczba* n-;
    }

    cout<<wynik<<endl;
    cout<<suma;
    return 0;
}

Czy zmienna long double nie powinna przechować nawet 300 cyfr? Wyniki zaczynają być ujemne dla obu zmiennych wynik i suma.

1 odpowiedź

0 głosów
odpowiedź 18 grudnia 2016 przez lnkoc Stary wyjadacz (13,960 p.)
wybrane 18 grudnia 2016 przez Jan Dobrakowski
 
Najlepsza

Proponuję Ci skorzystanie z funkcji:

sizeof(long long int);
sizeof(long double);

Aby zobaczyć ile bajtów zajmują w pamięci, na podstawie tych wartości będziesz mógł sprawdzić jak duże liczby mogą być przechowywane. Całkiem możliwe, że przekroczyłeś zakres, skoro wyniki stają się ujemne. Nigdzie nie jest powiedziane, że long double może przechowywać 300 cyfr, to zależy od Twojego kompilatora (a dokładniej od rozmiaru zmiennej jaki jej przydziela).

Edit: gdy dodajesz wartości typu int do long long int i long double powinieneś zrobić rzutowanie na te zmnienne:

wynik += (long double) liczba * n;
suma +=(long long int) liczba *n;

Mam też nadzieję, że gdy podajesz wartości liczba i n to nie wykraczasz poza zakres (możliwie największą) liczby dodatniej przez nie reprezentowaną (int), ponieważ przez to może pojawić się ujemny wynik.

PS. Używaj przycisku "code" gdy wstawiasz kod do posta. Szczegóły możesz znaleźć w FAQ forum. 

komentarz 18 grudnia 2016 przez Jan Dobrakowski Użytkownik (580 p.)
Pisałem inny program liczący wartość n^n i wynik zapisywał w long double, który wtedy mieścił kilkaset cyfr. Było to w tym samym kompilatorze.
komentarz 18 grudnia 2016 przez lnkoc Stary wyjadacz (13,960 p.)

No to na przyszłość pozostaje Ci jedynie pamiętać o robieniu przerzutowania typów wink

Podobne pytania

0 głosów
1 odpowiedź 263 wizyt
0 głosów
1 odpowiedź 266 wizyt
pytanie zadane 15 grudnia 2022 w C i C++ przez piotr_domanski Bywalec (2,080 p.)
0 głosów
3 odpowiedzi 1,034 wizyt
pytanie zadane 26 lipca 2019 w C i C++ przez Jacob7 Użytkownik (540 p.)

92,666 zapytań

141,564 odpowiedzi

320,019 komentarzy

62,031 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...