ホームページ >Java >&#&チュートリアル >Math.random() * n と Random.nextInt(n): ランダムな整数を生成するにはどちらが良い選択でしょうか?
Math.random() * n と Random.nextInt(n) の選択
Math.random() * の選択n と Random.nextInt(n) は、特定の範囲 [0, n-1] 内でランダムな整数を生成するときに発生します。どちらのアプローチもこの目的のための機能を提供しますが、効率と潜在的なバイアスの点で異なります。
Math.random() * n
Math.random() 0.0 (両端を含む) から 1.0 (両端を含まない) までのランダムな double 値。目的の範囲内のランダムな整数を取得するには、結果を n で乗算して int にキャストします。
Random.nextInt(n)
Random.nextInt (n) 0 (両端を含む) から n-1 までのランダムな int を直接生成します。 (包括的)。
効率とバイアス
Random.nextInt(n) は、単一の演算を必要とするため、Math.random() n よりも効率的です。 Math.random() に必要な複数の操作と比較して。さらに、Random.nextInt(n) は、特に多数の値を扱う場合に、Math.random() n よりもバイアスがかかりません。
このバイアスの説明は、Math.random() がどのように行われるかにあります。 double の値を生成します。これは、ほぼ均一な分布でランダムな仮数 (double の小数部) を生成する高度なアルゴリズムを使用します。ただし、結果が n 倍されて int にキャストされると、範囲内の特定の値が生成される可能性がわずかに高くなり、小さなバイアスが生じます。
対照的に、Random.nextInt(n ) は、必要な範囲内の整数を直接生成し、完全に均一な分布を保証します。このプロパティは、Math.random() * n で発生するバイアスの可能性を排除します。
結論
Math.random() * n はランダムな整数を生成できますが、効率とバイアスの可能性により、この目的には Random.nextInt(n) が推奨されます。 Random.nextInt(n) はより効率的で偏りも少なく、指定された範囲内でランダムな整数を生成する信頼性が高く正確な方法を提供します。
以上がMath.random() * n と Random.nextInt(n): ランダムな整数を生成するにはどちらが良い選択でしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。