Dlaczego to prawda? Wydaje się, że Java daje wynik z niewielką rozbieżnością podczas mnożenia dwóch zmiennych w porównaniu z C, a nawet metodą Java Math.pow.Java i C zmiennoprzecinkowe: "x * x" różni się od "pow (x, 2)"?
Java:
float a = 0.88276923;
double b = a * a; // b becomes 0.779281497001648 <---- what???
b = Math.pow(a,2); // b becomes 0.7792815081874238
C:
float a = 0.88276923;
double b = a * a; // b becomes 0.7792815081874238
pow(a,2); // b becomes 0.7792815081874238
Aktualizacja: Per komentarzu Ed S., ja również, że zachowanie C zmienia się w zależności od kompilatora. Używanie gcc wydaje się pasować do zachowania Java. Korzystanie z wizualnego studio (w zależności od platformy docelowej) może produkować wyniki widziane powyżej lub te widoczne w Javie. Ugh.
http://floating-point-gui.de/ –
Ah, arytmetyka zmiennoprzecinkowa. Czysty bastion dokładności i niezawodności. – Perception
Jestem świadomy, że zmienne nie są precyzyjne. Spodziewałbym się jednak, że ich nieprecyzyjność będzie konsekwentna. – mark