On 2013-01-24, Bernard Cupic <
bernardT...@gmail.com> wrote:
>
> Jedna od njih je usporedba sa varijablom koja je inicijalizirana
> eksplicitno na neku vrijednost, tada bi operator ==() trebao vratiti
> točnu vrijednost, ili se varam?
>
Ako zanemarimo marginalne slucajeve (NaN, -0), == je bitwise comparison kao
i kod integera. Znaci x==y vraca true ako im je svaki bit identican. Nema
nikakve magije i nepreciznosti jer je mapping izmedju reprezentabilnih
brojeva i bitwise reprezentacije bijekcija.
E sad, da li ce tvoj program raditi ispravno ovisi o tome sto radis i s
kojim brojem usporedjujes. Recimo, 0.1 ne postoji, pa stoga sljedeca
petlja nikada nece zavrsiti:
double x = 0;
while (x != 10.0) x += 0.1;
S druge strane, uvijek ce biti x-x==0.0 ili 2*x == x+x. (Opet, ako zanemarimo
marginalne slucajeve, ovdje overflow.)