gpt4 book ai didi

c# - RNGCryptoServiceProvider 无法对大随机数进行卡方检验

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:07:45 26 4
gpt4 key购买 nike

有谁知道为什么 RNGCryptoServiceProvider 在尝试获取大于 300,000,000 的数字时无法通过卡方检验。

我尝试获取 0-1,000,000,000 范围内的随机数,结果卡方检验失败,0-300,000,000 范围内的数字比其他数字出现得更多。

最终我将大数形式组合成较小的数 (0-99 *100M + 0-99,999,999) 并通过了卡方检验。

谁能用大数来解释这种异常现象?

我使用下面的代码来获取数字

    [Timeout(TestTimeout.Infinite), TestMethod]
public void TestMethodStatistic()
{
Dictionary<long, long> appearances = new Dictionary<long, long>();
UInt64 tenBillion = 10000000000;

for (UInt64 i = 0; i < 10000000; i++)
{
UInt64 random = GetSIngleRandomNumberInternal() % tenBillion;
UInt64 bucket = random /10000000;

if (!appearances.ContainsKey(Convert.ToInt64(bucket)))
{
appearances.Add(Convert.ToInt64(bucket), 0);
}
appearances[Convert.ToInt64(bucket)]++;
}
string results = "\nBucket Id\tcount\n";
foreach (var appearance in appearances)
{
results += appearance.Key+"\t"+ appearance.Value +"\n";
}
File.AppendAllText(@"C:\Result.txt",results);
}

private RNGCryptoServiceProvider rngCsp = new RNGCryptoServiceProvider();

private UInt64 GetSIngleRandomNumberInternal()
{
byte[] randomNumBytes = new byte[sizeof(UInt64)];
rngCsp.GetBytes(randomNumBytes);


return BitConverter.ToUInt64(randomNumBytes, 0);
}

获取 Result.txt 文件并将内容复制到 excel。将其制成表格并添加 2 列 1 是预期结果,值为 100000,第二个是卡方检验,值为 "=CHISQ.TEST([count],[[expected ]])"

当卡方检验的值小于 0.1 时,我们就有问题了。

最佳答案

问题很可能是您在使用余数技术时引入了偏差。参见 How much bias is introduced by the remainder technique?寻求解释。

关于c# - RNGCryptoServiceProvider 无法对大随机数进行卡方检验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20879023/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com