Il motivo per cui non è necessario controllare i float per l'uguaglianza è che i numeri in virgola mobile non sono perfettamente precisi - c'è qualche inaccuratezza nella memorizzazione con alcuni numeri, come quelli che si estendono troppo nella mantissa e ripetono i decimali (nota che Sto parlando della ripetizione dei decimali nella base 2). Puoi pensare a questa imprecisione come "arrotondando per difetto". Le cifre che si estendono oltre la precisione del numero in virgola mobile vengono troncate, arrotondando effettivamente verso il basso.
Se non è stato modificato, manterrà tale uguaglianza. Tuttavia, se lo modifichi anche leggermente, probabilmente non dovresti usare le uguaglianze, ma piuttosto un intervallo come (x < 0.0001 && x > -.0001)
.
In breve: finché non stai giocando con x a un livello molto piccolo, è OK.
fonte
2011-08-24 19:14:24
non capisco, se si avvia x a 0 perché non è bene controllare se 0? 0 è un valore valido per il doppio – JohnJohnGa
I numeri in virgola mobile hanno un sacco di arrotondamenti quando si inizia a raggiungere i limiti. La stessa ragione per cui se hai 3 cifre da usare in base dieci, hai .004 e dividi per tre, ti aspetti .001, ma chissà cosa succede. –
Correzioni di Thomas: tecnicamente non è arrotondato, ma inesattezza a causa della precisione limitata e della natura binaria dei galleggianti. –