重複の可能性:
Java で Doubles を使用して精度を保持する
Java でのこれら 2 つの操作の違いを知っていますか。
final double m1 = 11d / 1e9; // gives 1.1e-8
final double m2 = 11d * 1e-9; // gives 1.1000000000000001e-8
生成されたバイトコードを見ると、プリコンパイルされた m2 の結果が既に期待したものではないことがわかります。
の出力でjavap -verbose -c
、次の値を確認できます。
const #3 = double 1.1E-8d;
[...]
const #6 = double 1.1000000000000001E-8d;
他の式で m1 または m2 を使用すると、同じ結果が得られません。
Cで同じことを試すと、m1とm2は厳密に1.1e-8です
私の問題は、Javaが倍精度計算を処理する方法にあると思いますが、何が欠けているのか説明できません。