我正在開發一個受到嚴格監管審查的遊戲平臺。我選擇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之間的double值。這個代碼沒有問題。我所引用的是審計人員遇到的問題,因爲當範圍不是2的冪時,不幸的是我們所有的範圍都是0-99,0-999,0-9999,0-99999。 – IntoNET