Math.random() * n と Random.nextInt(n) の違いを理解する
Java で乱数を扱う場合、 Math.random() * n と Math.random() * n の違いを理解することが重要です。 Random.nextInt(n).
Math.random() メソッドは 0 から 1 (両端を除く) までの擬似ランダム double 値を生成しますが、Random.nextInt(n) は範囲内で均一に分散された整数を返します。 0 ~ n-1 (両端を含む)。
見かけの類似性にもかかわらず、この 2 つの間には大きな違いがあります。 Methods.
効率とバイアス
Random.nextInt(n) は、必要な計算が少ないため、Math.random() * n よりも効率的です。 Math.random() は double 値を生成してから n 倍する必要がありますが、Random.nextInt(n) は指定された範囲内の整数を生成するだけで済みます。
さらに、Random.nextInt(n) はMath.random() * n よりも偏りが少ない。 Math.random() は、擬似ランダム値を生成する方法により、特定の整数に対してわずかなバイアスを生成する可能性があります。 Random.nextInt(n) は、一様な分布を保証するアルゴリズムを使用して、この潜在的なバイアスを排除します。
説明
Sun フォーラムの投稿で説明されているように、Math.random( ) は内部的に Random.nextDouble() を利用しており、Random.next() を 2 回使用して、ビットが均一に分散された double を生成します。仮数。対照的に、Random.nextInt(n) は Random.next() を平均 2 回未満しか使用せず、その結果に法 n を適用して、指定された範囲内で均一な分布を保証します。
結論
0 から n-1 の範囲のランダムな整数を生成するには、Random.nextInt(n) が推奨される方法です。 Math.random() * n.
よりも効率的で偏りも少ないです。以上がMath.random() * n と Random.nextInt(n): ランダムな整数にはどちらの Java メソッドを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。