誰がDouble.MIN_VALUE
が実際にDoublesが取ることができる最小値ではないのか、いくつかの光を当てることができますか?これは正の値であり、Doubleはもちろん負の値にすることができます。
なぜ便利な数字なのかは理解していますが、特にInteger.MIN_VALUE
と比較すると、非常に直感的でない名前のようです。 Double.SMALLEST_POSITIVE
またはMIN_INCREMENT
などと呼ぶと、セマンティクスがより明確になります。
また、Doublesが取ることができる最小値は何ですか? -Double.MAX_VALUE
ですか?ドキュメントは言っていないようです。
IEEE 754形式には、符号用に予約された1ビットと、大きさを表す残りのビットがあります。これは、(もう1つの負の値を持つInteger値とは対照的に)origoの周りで「対称」であることを意味します。したがって、最小値は単純に最大値と同じで、符号ビットが変更されているため、yes、-Double.MAX_VALUE
が可能な限り小さいdouble
で表すことができる実際の番号。
Double.MAX_VALUE
はmaximumitudeと見なされるべきだと思います。この場合、実際に-Double.MAX_VALUE
と書くのが理にかなっています。また、Double.MIN_VALUE
が最小の正の値である理由を説明します(これは最小の可能な大きさを表すためです)。
しかし、確かに、命名が少し誤解を招くことに同意します。 Integer.MIN_VALUE
の意味に慣れていた私は、Double.MIN_VALUE
が表現できる最小absolute値だったことを読んだとき、少し驚きました。おそらく-
から離れたMAX_VALUE
であるため、可能な限り最小の値を表す定数を持つことは不要であると彼らは考えたのでしょう:-)
(注、Double.NEGATIVE_INFINITY
もありますが、これは「特別なケース」と見なされるべきであり、実際には実際の数字を表していないため、これは無視します。)
ここ は主題に関する良いテキストです。
これらの定数は、符号とは関係ありません。 doubleを3つの部分(Sign、Exponent、および仮数)の複合として考える場合、これはより理にかなっています。 Double.MIN_VALUEは、ゼロへのフラッシュが発生する前に指数が最小値になったときに仮数が想定できる実際の最小値です。同様に、MAX_VALUEは、無限大へのフラッシュが発生する前に指数が最大値になったときに仮数が想定できる最大値として理解できます。
これら2つのよりわかりやすい名前は 最大の絶対 (冗長性にゼロ以外を追加)および 最小絶対 値(冗長性に非無限大を追加)。
詳細については、 IEEE 754(1985) 規格をご覧ください。改訂版(2008)がありますが、Java(厳密にはJavaでもサポートされていないIEEE 754 1985の一部の必須機能のサポートさえない、より多くの形式のみが導入されています。 、他の多くの高レベル言語のように)。
Doubleの最小値はDouble.NEGATIVE_INFINITY
であるため、Double.MIN_VALUE
はDouble
の最小値ではありません。
Doubleは浮動小数点数であるため、最大数(精度が低い)または0に最も近い数(精度が高い)のみを使用できます。
無限ではないdoubleの最小値が本当に必要な場合は、-Double.MAX_VALUE
を使用できます。
浮動小数点数では、精度は、正確な範囲がないため重要です。
/**
* A constant holding the smallest positive nonzero value of type
* <code>double</code>, 2<sup>-1074</sup>. It is equal to the
* hexadecimal floating-point literal
* <code>0x0.0000000000001P-1022</code> and also equal to
* <code>Double.longBitsToDouble(0x1L)</code>.
*/
しかし、私はそれがおそらくより良い名前を付けられるべきだったことに同意します:)