Liczby zmiennoprzecinkowe - problemy z wynikami
Ostatnio zmodyfikowano 2011-07-16 14:19
akwes |
» 2011-07-16 14:19:22 float a = 1.1; double b = 1.1; if( a == b ) std::cout << "TAK!"; else std::cout << "NIE!";
i cały kod dla leniwych #include <iostream> #include <conio.h> int main() { float a = 1.1; double b = 1.1; if( a == b ) std::cout << "TAK!"; else std::cout << "NIE!"; getch(); }
wartość 1.1 się za chama nie da ładnie zaprezentować w hex, więc kompilator ma problem albo robi coś w stylu 1.10000000000000000000000001, czyli wylicza najbardziej możliwą dla siebie przybliżoną wartość (tak mi się wydaje) a że zakresy float i double są różne jeśli chodzi o ilość miejsc po przecinku to i 1.1 wygląda różnie. 1.0001 != 1.000001
cool story: Pamiętam jak na UTK nas męczyli przeliczaniem liczb, więc ja napisałem program, który robił to za mnie i robił ładny plik *.txt do wydruku. Część liczb w ułamkach po prostu się nie dała zapisać binarnie, pamiętam że właśnie wtedy dałem programowi ograniczenie do 500 przejść... Hm... Niektórzy mieli ambicje dojść do końca i robili to ręcznie ale przy 30 padali :) |
|
1 « 2 » |