.NET基準源がAS the implementation of NextBytes()
示す:Random.NextBytesに偏っていますか?
for (int i=0; i<buffer.Length; i++)
{
buffer[i]=(byte)(InternalSample()%(Byte.MaxValue+1));
}
InternalSample
それのドキュメンテーションコメントとNext()
、この範囲を返すように記載されているという事実によって証明されるように、[0、int.MaxValue)の値を提供します、単にInternalSample
を呼び出します。
InternalSample
はint.MaxValue
異なる値を生成することができ、その数は256で割り切れるわけではないので、いくつかの値(この場合は255)が発生します。他のものよりも頻度が低い。
私の質問は:
- は、この分析は正しいですか、実際に方法が公平なのですか?
- バイアスが存在する場合、実際のアプリケーションで問題になるほど強くなっていますか?
FYI私はRandom
を暗号目的で使用しないでください。私はそれが有効なユースケース(例えば、シミュレーション)であると考えている。
'int.MaxValue' ** +1 **値 - ゼロを忘れましたか? –
ええええええええ、これは偏った分析です。この演算は、単に値の下位8ビットを取ります。範囲0..int.maxvalueは、256個の値の整数倍数、8,388,608を持ちます。偏見はない、ドナルドは確信した。 –
@AndrewMorton [Random.Next()]のドキュメント(https://msdn.microsoft.com/en-us/library/9b3ta19y(v = vs.110).aspx)は、int.MaxValueが返されることはありません。したがって、 'int.MaxValue + 1'値ではなく、' int.MaxValue'値を持っていますか? – ChaseMedallion