-2

1.09 で Math.pow を試して二乗を計算しました。結果として 1.1881000000000002 を取得していましたが、 1.09*1.09 を試したところ、同じ結果が得られました。

なぜ私はこれを得ているのですか?

Java 環境の詳細 - Java バージョン "1.6.0_38" Java(TM) SE ランタイム環境 (ビルド 1.6.0_38-b05) Java HotSpot(TM) 64 ビット サーバー VM (ビルド 20.13-b02、混合モード)

修正はありますか??

4

3 に答える 3

2

Math.pow は非常に遅いので、必要がない限り使用しません。浮動小数点は、ほとんどの 10 進数を正確に表すことができません。代わりに、最も近い表現可能な値を格納します。この値を印刷すると、この表現を持つ最短の 10 進数が必要であると想定されます。つまり、エラーが隠されます。

ただし、計算を実行すると、このエラーが明らかになる可能性があります。これは、結果に適切な丸めを適用する必要がある場合です。例えば

double d = 1.09;
System.out.printf("%.4f%n", d * d);

版画

1.1881
于 2013-10-06T07:34:40.947 に答える