質問

Javaでのfloatとdoubleの包括的範囲は何ですか?

精度が重要な場合にfloatまたはdoubleを使用することをお勧めしないのはなぜですか?

役に立ちましたか?

解決

Javaの Double クラスには、そのタイプの最小値と最大値を含むメンバーがあります。

2^-1074 <= x <= (2-2^-52)·2^1023 // where x is the double.

Min_VALUE および MAX_VALUE の静的最終メンバー Double を確認します。

(一部)丸め誤差は測定可能な(わずかな)量の計算をスローオフする可能性があるため、精度と精度が重要な場合に浮動小数点型を使用することを推奨しません。

他のヒント

Javaのプリミティブデータ型

ブール値: 1ビット。 trueとfalseのみの値を取ることができます。

バイト: 1符号付きバイト(2の補数)。 -128〜127の値をカバーします。

short: 2バイト、符号付き(2の補数)、-32,768〜32,767

int: 4バイト、符号付き(2の補数)。 -2,147,483,648〜2,147,483,647。

long: 8バイトの符号付き(2の補数)。 -9,223,372,036,854,775,808から+9,223,372,036,854,775,807までの範囲。

float: 4バイト、IEEE754。1.40129846432481707e-45〜3.40282346638528860e + 38(正または負)の範囲をカバーします。

double: 8バイトIEEE754。4.94065645841246544e-324dから1.79769313486231570e + 308d(正または負)の範囲をカバーします。

char: 2バイト、符号なし、Unicode、0〜65,535

値はバイナリの累乗されたバイナリ整数として格納されるため、バイナリ浮動小数点数には興味深い精度の特性があります。サブ整数値(つまり、0から1の間の値)を扱う場合、2の負のべき乗の「切り捨て」は、負の10の累乗とは大きく異なります。

たとえば、0.1という数値は1 x 10 -1 で表すことができますが、0.1を正確に表すことができる2を底とする指数と仮数の組み合わせはありません。 0.10000000000000001。

したがって、0.1または0.01のような値を大量に処理しているが、小さな(0.000000000000001%未満の)エラーを許容できないアプリケーションがある場合、2進浮動小数点数は使用できません。

逆に、10の累乗が「特別」ではない場合、あなたのアプリケーション(通貨の計算では10の累乗が重要ですが、物理学のほとんどのアプリケーションではそうではありません)、実際にはバイナリ浮動小数点を使用する方が良いです、それは通常少なくとも1桁速く、そしてメモリ効率がはるかに高くなります。

浮動小数点の問題と制限に関するPythonドキュメントの記事は素晴らしい仕事をしていますこの問題をわかりやすい形式で説明する。ウィキペディアには、表現の背後にある数学を説明する浮動小数点に関する優れた記事もあります。

もちろん、「クリティカル」にはフロートまたはダブルを使用できます。事柄...多くのアプリケーションは、これらのデータ型を使用して数値を処理するだけです。

完全に等しいかどうかを比較など。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top