[C++] Mnożenie dużych liczb i wypisanie wyniku


(Thewhitedragoon) #1

Witam,

mam pewien problem z wynikiem mnożenia dużych liczb. Załóżmy, że mam dwie liczby całkowite dodatnie. Jedna to 123456789, a druga to 99999. Kiedy mnożę je przez siebie i zapisuję do zmiennej (przykładowo) wynik typu unsigned long long , a potem wyświetlam tą zmienną, to okazuje się, że wynik nie jest poprawny (poprawny wynik sprawdzam windowsowym kalkulatorem). W zależności co mnożę i do jakiego typu zmiennej zapisuję, wychodzą różne wyniki. Niekiedy ujemne! Czy ktoś wie dlaczego tak się dzieje? Używam Dev'aC++, ale nie sądzę, żeby to miało jakiś wpływ.


(Fiołek) #2

Wynik mnożenia zmieści się w unsigned long long(z tym, że kompilator może go domyślnie traktować jako inta, co w rezultacie da zły wynik), ale nie zmieści się w liczbach mniejszych. Jest to spowodowane tym, że nie da się go zapisać na 32 bitach(a co dopiero w liczbach mniejszych). Poczytaj sobie o tym, jak komputer przechowuje liczby, np. w tym artykule(a w szczególności rozdział Systemy liczbowe), a rozjaśni Ci się, o czym mówię.


(Thewhitedragoon) #3

Co w takim razie można zrobić, aby dobrze wyświetlić wynik? Na przykład taki kod:

#include 


int main()

{

    using namespace std;


    int liczba = 123456789;

    unsigned long long kwadrat = liczba * liczba;


    cout << kwadrat;


    return 0;

}

Wynik nie wyświetli się poprawnie. Co mam zrobić?


(Fiołek) #4
unsigned long long liczba = 123456789;

(Thewhitedragoon) #5

Tak teraz już wszystko działa. Bardzo dziękuję.