Hallo Joachim,
man kann das Problem noch einfacher darstellen. <=> ist der Spaceship Operator, der -1, 0 oder 1 ausgibt, je nachdem, ob der linke Operand kleiner als, gleich wie oder größer als der rechte Operand ist.
echo (42.01 + 146.17 <=> 188.18) . "<br>";
echo (42.01 + 146.18 <=> 188.19) . "<br>";
echo (42.02 + 146.18 <=> 188.20) . "<br>";
Ergibt
-1
0
1
Grund: Der Datentyp float kann Integerzahlen im Bereich der Mantissenlänge jederzeit korrekt darstellen. Sobald Nachkommazahlen ins Spiel kommen, wird es schwierig, weil [IEEE 754] ein binäres Format ist. Du kannst bspw. 1/7 nicht als endliche Dezimalzahl darstellen. Und Du kannst 1/100 nicht als endliche Binärzahl darstellen.
Dass der mittlere Vergleich 0 ergibt, ist reiner Zufall.
Janosch war dazu im Wiki sehr fleißig
Rolf
--
sumpsi - posui - obstruxi
sumpsi - posui - obstruxi