少なくともJavaでは、このコードを書くと:
float a = 1000.0F;
float b = 0.00004F;
float c = a + b + b;
float d = b + b + a;
boolean e = c == d;
の値はなり。これは、数値を正確に表現する上でフロートが非常に制限されているという事実が原因であると考えています。しかし、なぜの位置を変えるだけでこの不平等が生じるのか理解できません。
以下のように、3行目と4行目の両方で sを1 に減らしましたが、の値はなり。
float a = 1000.0F;
float b = 0.00004F;
float c = a + b;
float d = b + a;
boolean e = c == d;
3行目と4行目で何が起こったのでしょうか?浮動小数点数を使用した加算演算が結合的ではないのはなぜですか?
前もって感謝します。
X
に大きな数とY
非常に小さな数を検討してくださいX + Y = X
。ここでX + Y + -X
は、ゼロになります。しかし、X + -X + Y
なりますY
。