[java] Double.MIN_VALUEが負でない理由


2 Answers

これらの定数は記号とは関係ありません。 これは、doubleを3つの部分(Sign、Exponent、Mantissa)のコンポジットとして考えると、より理にかなっています。 Double.MIN_VALUEは実際には、指数がゼロになるとMantissaが仮定できる最小値で、ゼロへのフラッシュが発生します。 同様に、MAX_VALUEは、無限大へのフラッシュが発生する前に指数が最大値になったときに仮定できる最大値と理解できます。

これらの2つの記述的な名前は、 Largest Absolute (verbositiyにゼロ以外の値を追加)と最小絶対値(verbositiyに無限大を加えない)のいずれかです。

詳細は、 IEEE 754(1985)の標準を参照してください。 改訂された(2008)バージョンがありますが、それはjavaでサポートされていないより多くのフォーマットしか紹介していません(厳密に言えば、Javaは厳密にIEEE 754 1985のいくつかの必須機能をサポートしていません。

Question

Double.MIN_VALUEが実際にダブルスが取ることができる最小値でない理由をDouble.MIN_VALUEが明らかにすることができますか? それは正の値であり、Doubleはもちろん否定的なことがあります。

私はそれがなぜ有用な数字なのか理解していますが、特にInteger.MIN_VALUEと比べると非常に直感的ではないようです。 Double.SMALLEST_POSITIVEまたはMIN_INCREMENTなどと呼ぶと、より明確なセマンティクスが得られます。

また、ダブルスが取ることができる最小値は何ですか? それは-Double.MAX_VALUEですか? ドキュメントは言わないようです。




私は、混乱している名前をFLT_MINを最小の正の数として定義したCに戻すことができると仮定します。

Javaでのように-Double.MAX_VALUEを使用する必要がある場合は、 -Double.MAX_VALUEを使用してCで最小の浮動小数点-FLT_MAXを取得する必要があります。




documentsで言われてdocuments

Double.MIN_VALUEは、double型の最小のPOSITIVE非ゼロ値、2 ^( - 1074)を保持する定数です。

ここでのトリックは浮動小数点数の表現です。 doubleデータ型は、倍精度の64ビットIEEE 754浮動小数点です。 浮動小数点数は、 1,000,000,000,000から0.0000000000000001までの数値を簡単に表し、スケールの両端の精度(桁数)を最大化します。 (詳しくはHere参照してください)

仮数は常に正の数で、浮動小数点数の有効桁を保持します。 指数は、基数の正または負の累乗を示し、仮数と符号に掛けるべきであることを示します。 4つのコンポーネントをfollowsに組み合わせて浮動小数点値を取得します。

MIN_VALUEは、仮数が表すことができる最小値であると考えてください。 浮動小数点表現の最小値は、それを使って表現できる最小の大きさであるためです。 (ただし、この混乱を避けるために、より良い名前を使用していた可能性があります)

123> 10> 1> 0.12> 0.012> 0.0000123> 0.000000001> 0.0000000000000001


以下はFYIです。

倍精度浮動小数点数は、2 ^ -1074から2 ^ 1023までの2,098乗の2乗を表すことができます。 2の非正規化累乗は、2 ^ -1074から2 ^ -1023のものです。 2の正規化累乗は2 ^ -1022から2 ^ 1023までのものです。 thisthis参照してください。




Related