[解決済み] 0.0と1.0の間にはいくつの倍数があるのでしょうか?
質問
何年も前から気になっていたことなのですが、これまで質問する時間がありませんでした。
多くの (擬似) 乱数生成器は 0.0 から 1.0 の間の乱数を生成します。数学的にはこの範囲には無限の数が存在しますが
double
は浮動小数点数であるため、有限の精度を持っています。
ということで質問です。
-
どれだけの
double
の間にはいくつの数字があるのでしょうか? - 1 と 2 の間には同じだけ多くの数字がありますか?100と101の間?10^100 と 10^100+1 の間ですか?
注:もしそれが違いを生むなら、私はJavaの定義に興味があります。
double
の定義に特に興味があります。
どのように解決するのですか?
Java
double
は
IEEE-754
形式であるため、52 ビットの端数を持ちます。隣接する 2 つの 2 の累乗 (1 を含み、次の 1 を除く) の間には、2 の 52 乗が存在することになり、異なる
double
が存在することになります (つまり、4503599627370496 個)。 例えば、これは異なる
double
の数であり、1.0 が含まれる場合と 2.0 が含まれる場合の間にもちょうど同じ数が存在します。
を数えることで
doubles
0.0 と 1.0 の間を数えるのは、2の累乗の間よりも難しいです。その範囲には多くの2の累乗が含まれ、さらに、非正規化された数という厄介な問題に巻き込まれるからです。 指数部の11ビットのうち10ビットが問題の範囲をカバーしているので、非正規化された数(と、いくつかの種類の
NaN
を1024倍することになります。
double
は 2 の累乗となり、それ以上は
2**62
を超えることはありません。非正規化された &c を除くと、その数は 1023 回になると思います。
2**52
.
100から100.1"のような任意の範囲では、上限を正確に
double
として正確に表すことができないため、さらに難しくなります (2 の任意の累乗の正確な倍数ではない)。 手軽な近似として、2の累乗の間の進行は線形であるため、当該範囲は
0.1 / 64
であると言えます。
(0.1 / 64) * 2**52
明確
double
になる。
7036874417766.4004
...1つか2つはある;-)。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン