wiem podwójne nie powinny być porównywane przez operatora bezpośredniego
== To jest tylko prawda, jeśli nie wiem, ile reprezentacja lub zaokrąglania błąd. Klasycznym przykładem tego, co nie do zrobienia jest
0.1 + 0.2 == 0.3 // false :(
Jednak jeśli używasz zaokrąglania jak
if (round4(0.1 + 0.2) == 0.3) // true
z Chronicle Core's Maths
public static double round4(double d) {
final double factor = 1e4;
return d > WHOLE_NUMBER/factor || d < -WHOLE_NUMBER/factor ? d :
(long) (d < 0 ? d * factor - 0.5 : d * factor + 0.5)/factor;
}
Jeśli nie jest modyfikowany, robi * b == 0 zawsze prawda?
Jest przeznaczony dla liczb skończonych. Dla nieskończoności i NaN
otrzymasz NaN
i nie jest to równe cokolwiek.
Czy próbowałeś napisać test (jUnit) i zweryfikować siebie? –
Może być powiązany: http://stackoverflow.com/questions/21005444/double-comparison-to-zero-special-case?rq=1 FWIW, mnożenie przez 0 spowoduje, że wynik * dokładnie * 0 (brak błędów zaokrąglania lub nieścisłości). – Thilo