Es passiert auf jeder IEEE 754 Gleitkommazahl. Dies liegt an der Natur der Gleitkommadarstellung. Jede Sprache, die das IEEE 754-Format verwendet, wird das gleiche Problem auftreten.
Da 1.0
möglicherweise nicht genau in Fließkomma-System wie 1.000000000...
dargestellt wird, gilt es daher als gefährlich, sie mit ==
zu vergleichen. Gleitkommazahlen sollten immer mit einem Epsilon-Wert verglichen werden.
Da Gleitkommaberechnungen ein wenig Unsicherheit mit sich bringen, können wir versuchen, dies zu berücksichtigen, indem wir sehen, ob zwei Zahlen "nahe beieinander" sind. Wenn Sie sich entscheiden - basierend auf der Fehleranalyse, Prüfung oder eine wilde Vermutung -, dass das Ergebnis immer innerhalb 0,00001 des erwarteten Ergebnisses sein soll, dann können Sie Ihren Vergleich dazu ändern:
if (fabs(someFloat - 1.0)) < 0.00001)
Der Maximalwert Fehler ist in der Regel namens Epsilon.
Wahrscheinlich sollten Sie lesen What Every Computer Scientist Should Know About Floating-Point Arithmetic
Vielen Dank! Ich bin jetzt froh, dass ich gefragt habe. –