- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个受到严格监管审查的游戏平台。我选择 Math.NET 是因为它看起来很合适。然而,我刚刚从我们的审计员那里收到了这条评论。
请评论这是否准确以及如何解决?
在RandomSource()中,Next(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 的幂,否则将存在偏差)。
最佳答案
更新:Next(minInclusive, maxExclusive)
的实现已在 Math.NET Numerics v3.13 中更改如下这个讨论。从 v3.13 开始,它不再涉及 float ,而是根据需要使用尽可能多的位数对整数进行采样以支持请求的范围(2 的幂)并拒绝实际范围之外的那些。这样它就避免了在字节采样本身之上添加任何偏差(例如由加密 RNG 提供)
假设:DoSample()
返回 [0,1)
( double float )范围内的均匀分布样本。
将它与范围 R=max-min 相乘将导致在 [0,R)
范围内均匀分布的样本。将其转换为一个整数(本质上是一个底数)将导致 0,1,2,...,R-1
之一的均匀分布的离散样本。我看不出 R 是偶数、奇数或 2 的幂这一事实会在何处影响这一步中的偏差。
计算 100'000'000 个样本的几次运行也没有表明明显的偏差,但这当然不是证据:
var r = new CryptoRandomSource();
long[] h = new long[8];
for (int i = 0; i < 100000000; i++)
{
h[r.Next(2,7)]++;
}
0
0
19996313
20001286
19998092
19998328
20005981
0
0
0
20000288
20002035
20006269
19994927
19996481
0
0
0
19998296
19997777
20001463
20002759
19999705
0
关于c# - Math.NET CryptoRandomSource Next 是有偏见的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39013455/
在阅读如何使用 std::rand 时,我在 cppreference.com 上找到了这段代码 int x = 7; while(x > 6) x = 1 + std::rand()/((R
我是一名优秀的程序员,十分优秀!