0.1 float jest większe niż 0.1 podwójne. Spodziewałem się, że będzie fałszywy [duplikat]
To pytanie ma już tutaj odpowiedź:
Jeśli operator <działa poprawnie dla typów zmiennoprzecinkowych, dlaczego nie możemy go użyć do testowania równości? 5 odpowiedziPozwolić:
double d = 0.1;
float f = 0.1;
czy wyrażenie
(f > d)
powróttrue
lubfalse
?
Empirycznie odpowiedź brzmitrue
. Jednak spodziewałem się, że tak będziefalse
.
Tak jak0.1
nie może być idealnie reprezentowany w postaci binarnej, podczas gdy podwójne ma15
do16
dziesiętne cyfry precyzji, a float ma tylko7
. Więc oba są mniejsze niż0.1
, podczas gdy podwójne jest bliżej0.1
.
Potrzebuję dokładnego wyjaśnienia dlatrue
.