ホームページ >Java >&#&チュートリアル >Math.random() と Random.nextInt(): ランダムな整数を生成するにはどちらの方法を選択する必要がありますか?
Math.random() と Random.nextInt() の違い
プログラミングで乱数生成を扱う場合、一般的な 2 つの方法Math.random() と Random.nextInt(int) はよく問題になります。どちらも乱数を生成するという目的を果たしますが、効率と生成される数値の分布が異なります。
Math.random() は 0.0 から 1.0 (排他的) までの double 値を生成します。 )、この範囲内の特定の値を取得する確率は等しいです。 Math.random() を使用して指定された範囲内の整数を生成するには、通常、その範囲を乗算して整数にキャストします。ただし、このメソッドではキャスト操作によりバイアスが生じる可能性があります。一方、
Random.nextInt(int) は、指定された範囲 (両端を含む) 内の整数を生成します。範囲内の各値が選択される確率は同じです。このメソッドは、キャストを行わずに整数値を直接生成するため、Math.random() よりも効率的で偏りが少ないです。
技術的な説明
内部的には、Math.random() random() は Random.nextDouble() に依存しており、Random.nextDouble() を 2 回使用して、均一なビット分布を持つ double を生成します。仮数。対照的に、Random.nextInt(int) は、指定された範囲内で均一に分散された値を返すために Random.next() を利用するのは平均 2 回未満です。
さらに、Math.random() は出力をその結果、整数値に対して 6 つの潜在的な「バケット」が生成されます。これにより、十分な数の乱数が生成される範囲内の特定の値に偏る可能性があります。
パフォーマンスと同期
Math.random() には約 2 回の必要があります。 Random.nextInt(int) の処理は同期の対象となるため、影響を与える可能性があります。
結論
整数乱数生成を扱う場合、Random.nextInt(int) は Math.random() と比較してより効率的で偏りの少ない選択肢です。 * n、より優れたパフォーマンスとより正確な均一分布を提供します。
以上がMath.random() と Random.nextInt(): ランダムな整数を生成するにはどちらの方法を選択する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。