4

私が実行する場合

  97346822*3f, result is 2.9204048E8,

でも

 97346822*3.0 gives me 2.92040466E8.

説明してください。

4

4 に答える 4

6

数値3.0は値のリテラル表現double( と同等3.0d)3.0fですが、 はfloat値です。精度が異なると、異なる結果が得られる理由が説明されます。adoubleは 64 ビットを使用して格納され、afloatは 32 ビットを使用します。

于 2013-07-25T18:24:45.710 に答える
3
97346822*3.0

として扱われdoubleます。

オラクルのチュートリアルに基づく

double データ型は、倍精度の 64 ビット IEEE 754 浮動小数点です。その値の範囲は、この説明の範囲を超えていますが、Java 言語仕様の浮動小数点型、形式、および値のセクションで指定されています。10 進数値の場合、通常、このデータ型がデフォルトの選択です。

97346822*3f

として扱われfloatます。

于 2013-07-25T18:24:41.160 に答える
0

These are findings related to this question and my answer to same.

While 3.0 and 3f both have the same value when put into floating point values, the actual value is used as working memory for the floating point operation. The internal values that are part of the multiplication do not fit into the floating point value themselves and are modified, resulting in a difference of 14.0 between the obtained results.

于 2013-07-26T14:28:19.787 に答える