2017-03-06 3 views

答えて

1

はい、それはアルゴリズムがダウンしていますが、可能な限り簡単に範囲を操作できるように設計されていると思います。別の整数を乗算します。他のランダム関数の利便性と標準のほかに特別な理由はないようです。

0

これは最も理にかなっているため、[0、1]で数値を返します。単純な式で他の間隔[ロー、ハイ)に変換するのは簡単です:

low + Math.random() * (high - low) 

あなたはそれが均等に簡単に変換特性を有する他に何を選びますか?

+1

「最も合理的」であるという大胆な声明。 'Math.random(low、high)'は現在のインターフェースのために表示されるバイアスバグをすべて最小限に抑え、最小限に抑えます。 –

+0

@EmilVikström私は固定間隔の間、ほとんどの意味を意味します。 – Henry

0

許容ビットパターンには2倍を表す制約があります。したがって、ランダムビットのロードを生成して、それが有効な倍数であると予想することはできません。 NaNINFINITYのようなものと完全に無効なパターンがあります。

これを考えると、二重を生成する最も簡単な方法は除算を行うことです。コードは既に必要なすべての作業を行うためのものです。最高の穀粒を得るために、2つの大きな数字を低い結果で分割する必要があります。 )最もランダムな整数発生器は、0°の範囲内max_randomを生成するため

random_double = random_integer/(1.0 * max_random) 

)次いで、得られた二重の範囲である[0、1.0:そのようなものを意味します。

$ 0.012

+0

1.0を生成しないようにするには 'random_integer /(max_random + 1.0)'にする必要があります。 (または、あなたは、掛け算の間隔が半分ではなく閉じていると言う必要があります。)副次的な利益として、除数は2の累乗になりますので、除算は正確で、高速計算方法があります。 – rici

+0

あなたが正しい番号を知っていたとしても、実際には役に立たないでしょう。同様に、ランダムなダブルを公平なダイロールの​​結果に変換しようとすると、ぎこちなくなります。 –

関連する問題