Javaのdoubleが、±5,0*10(^-324)
から±1,7*10(^308)
までの特定の値の範囲を持つのはなぜですか?なぜそれが好きではないのですか?±5,0*10(^-324)
〜±5,0*10(^308)
または±1,7*10(^-324)
〜±1,7*10(^308)
?あなたの質問へなぜdoubleに特定の範囲の値があるのですか? (Java)
-2
A
答えて
1
回答は非正規数、Javaで
https://en.wikipedia.org/wiki/Denormal_number
ダブル浮動小数点数はIEEE 754
で定義されたフォーマットに基づいており、チェック以下のリンクです。
説明については、このリンクを参照してください。
https://en.wikipedia.org/wiki/Double-precision_floating-point_format
- 浮動小数点数は
- サインビット以下に分割され
64 bits
- 64ビットで表現されたルールの簡単なセットされる次のとおりの
1 bit
(符号は数) - 指数:
11 bits
(署名) - 仮数精度(フラクション):私たちは、この設定から取得
52 bits
- サインビット以下に分割され
番号の範囲は
-1022 <= Exponent <= 1023 (total 2046) (excluding 0 and 2047, they have special meanings)
000 (0 in base 16) is used to represent a signed zero (if F=0) and subnormals (if F≠0); and
7ff (2047 in base 16) is used to represent ∞ (if F=0) and NaNs (if F≠0),
https://en.wikipedia.org/wiki/Exponent_bias
ですそして
-2^52 <= Fraction <= 2^52
だから表すことができる最小値および最大値が
Min positive double = +1 * 2^(-1022) ≈ 2.225 * 10(−308)
Note: 1022 * Math.log(2)/Math.log(10) = 307.652
and Math.pow(10, 1 - .652) = 2.228 (.652 is approximation)
Max positive double = +(2^52) * (2^1023) = 1.797 * 10^308
されるように、範囲は[-2.225×10(-308)、1.797 * 10^308]
なりますこの範囲の変化に起因するsubnormal numbers
非正規数であります数値は、仕様で定義されている最小標準の の数値よりも小さくなります。
数字が0.00123
の場合、1.23 * 10^(-3)
と表示されます。仕様による浮動小数点数には、先行ゼロはありません。したがって、先行ゼロのある数字がある場合は、デフォルトのExponent
に追加されます。だから先行ゼロで可能な最小指数を持つ数値がある場合、先行ゼロは負の指数に加算されます。
signifand (fraction)
には52
ビットがあります。したがって、バイナリ内の先行ゼロの最大数は51
になる可能性があります。次の番号を効果的に生成する。
Min positive Subnormal = 1 * 2^-52 * (2^-1022) = 2^(-2074) ≈ 4.9·10^(−324)
Note: 1074 * Math.log(2)/Math.log(10) = 323.306
Math.pow(10, 1 - 0.306) = 4.943
だから、あなたはそれを持って、範囲が今
ある[ - ミン非正規数、+マックス通常の数]
または
[ - 4.9 * 10 ^( -324)、+ 1.79769 * 10^308]
関連する問題
- 1. 特定の値が範囲内にあるかどうかを調べるJava
- 2. Javaの特定の範囲でランダムな文字を取得
- 3. 特定の値の範囲内でどのように数値の範囲を合計しますか?
- 4. Excel VBA - 範囲にDOUBLE値が含まれている場合、範囲内の最大(または特定の値)のアドレスを探します。
- 5. ストア任意の値とクラスの特定の範囲の値が
- 6. doubleをintにキャストしたが、doubleの値が範囲外の場合はどうなりますか?
- 7. Hashmapの値の型がdouble []ではなくdoubleであるのはなぜですか?
- 8. Python - リスト範囲を特定の値に設定する
- 9. 別の範囲の値から範囲を定義する
- 10. なぜリストインデックスが範囲外のエラーになるのですか
- 11. 特定の日付範囲に収まる平均値はありますか?
- 12. セルの範囲から特定の値を除外する
- 13. 特定の範囲のカラーマッピング
- 14. 範囲から範囲内のセルを、別のセルのテキスト値である範囲にコピーする
- 15. FFmpegのaf_atempoフィルタが[0.5、2.0]の範囲にあるのはなぜですか?
- 16. 「this.data」が範囲外になるのはなぜですか?
- 17. 特定の範囲内の値の出現(Excel)(VBAなし)
- 18. Python Raw_Input特定の範囲
- 19. インデックスがMVC 4の範囲外にあるのはなぜですか?
- 20. 値を特定の範囲にマップする
- 21. Xtext - 値を特定の範囲に制限する方法は?
- 22. 数値が範囲内にあるかどうかのブール値
- 23. 特定の範囲のプレーヤーを検出すると、タレットが回転しないのはなぜですか?
- 24. JAVAの特定の範囲でランダムな日付を生成する
- 25. マップ内の特定の範囲の値を格納する
- 26. InputBox:特定の範囲の値のみを許可する
- 27. JAVA特定の範囲の数値のテーブルを生成するにはどうすればよいですか?
- 28. 無効な特定の日付範囲
- 29. 入力が特定のタイプで特定の範囲にあるかどうかをチェック
- 30. VBA - 範囲2の最大値からの範囲の設定
IEEE-754が指定されているため、https://en.wikipedia.org/wiki/IEEE_f loating_point –
特定の範囲を持たない場合、 'double'は表現できません。 (あなたは無限大の数値を有界のメモリで表現することはできません) –
私の答えを見て、それを掘るのに時間がかかりました:) – 11thdimension