私がこれを理解しているように、一部の数値は 2 進数で正確に表現できないため、浮動小数点演算で予期しない結果が生じることがあります。4.35 * 100 = 434.99999999999994 のように。10 進数の 1/3 で起こることと似たようなことです。
それは理にかなっていますが、これは別の疑問を引き起こします。バイナリでは、4.35 と 435 の両方を正確に表現できるようです。それが私にとって意味をなさないときです。4.35 * 100 が 434.99999999999994 と評価されるのはなぜですか? 435 と 4.35 は double 型のダイナミクスで正確に表現されます。
double number1 = 4.35;
double number2 = 435;
double number3 = 100;
System.out.println(number1); // 4.35
System.out.println(number2); // 435.0
System.out.println(number3); // 100.0
// So far so good. Everything ok.
System.out.println(number1 * number3); // 434.99999999999994 !!!
// But 4.35 * 100 evaluates to 434.99999999999994
なんで?
編集:この質問は重複としてマークされましたが、そうではありません。受け入れられた回答でわかるように、私の混乱は、実際の値と印刷された値の不一致に関するものでした。