私が実行する場合
97346822*3f, result is 2.9204048E8,
でも
97346822*3.0 gives me 2.92040466E8.
説明してください。
私が実行する場合
97346822*3f, result is 2.9204048E8,
でも
97346822*3.0 gives me 2.92040466E8.
説明してください。
数値3.0
は値のリテラル表現double
( と同等3.0d
)3.0f
ですが、 はfloat
値です。精度が異なると、異なる結果が得られる理由が説明されます。adouble
は 64 ビットを使用して格納され、afloat
は 32 ビットを使用します。
97346822*3.0
として扱われdouble
ます。
オラクルのチュートリアルに基づく
double データ型は、倍精度の 64 ビット IEEE 754 浮動小数点です。その値の範囲は、この説明の範囲を超えていますが、Java 言語仕様の浮動小数点型、形式、および値のセクションで指定されています。10 進数値の場合、通常、このデータ型がデフォルトの選択です。
97346822*3f
として扱われfloat
ます。
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.