私は厳しい規制の精査の対象となるゲームプラットフォームを開発しています。私はMath.NETを選択しました。しかし、私は監査人からこのコメントを受け取りました。Math.NET CryptoRandomSource次へバイアスされています
コメントが正確で、解決方法は? RandomSource()、次に(INT、INT)で
次のように定義される:
public override sealed int Next(int minValue, int maxValue)
{
if (minValue > maxValue)
{
throw new ArgumentException(Resources.ArgumentMinValueGreaterThanMaxValue);
}
if (_threadSafe)
{
lock (_lock)
{
return (int)(DoSample()*(maxValue - minValue)) + minValue;
}
}
return (int)(DoSample()*(maxValue - minValue)) + minValue;
}
これは前と同じようにバイアスを生成します。 RNGからスケーリングされていない値を使用し、事前にバイアスを除去することなく範囲を掛けます(範囲が2の累乗でない限り、偏りがあります)。
それが返す正確に何知らない? 'DoSample()'は何であるそのハード、ここで何が起こっているのか動作するように。それだけでuniformalyランダム配布されます0と1の間の数字(どのエンドポイントに含まれているか除外されていますか)は実際には偏っていないことを知っていますか? – Chris
また、メソッドの期待戻り値は何ですか? maxValueまたはminValueを返すことができるはずですか?また、 'Next(0,1)'何百万(何十億)というようなものを呼び出すか、それらが大きく異なるかどうかを調べるための基本的なテストを行ったことがあります。 – Chris
DoSample()メソッドは、0と1の間の倍精度値を返します。このコードに問題はありませんが、大きなサンプルサイズでは大きさが異なる場合、何かが間違っていることを確かめることができます。 。私が引用したビットは、審査員が問題を抱えているのは、範囲が2の累乗ではないからです。残念ながら、すべての範囲は0-99,0-999,0-9999,0-99999です。 – IntoNET