gpt4 book ai didi

c# - RNGCryptoServiceProvider : generate random numbers in the range [0, randomMax)

转载 作者:太空狗 更新时间:2023-10-29 22:54:50 28 4
gpt4 key购买 nike

我编写了以下代码来生成 [0, int.MaxValue) 范围内的随机数,但我不确定如何在保持均匀分布的同时将范围限制为 [0, randomMax):

private static int GetNextInt32(this RNGCryptoServiceProvider random)
{
var buffer = new byte[sizeof(int)];
random.GetBytes(buffer);
return Math.Abs(BitConverter.ToInt32(buffer, 0));
}

谢谢。

最佳答案

这是一种方法:http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=775 .请参阅标题为“创建 System.Random 替换”的部分。

但是请注意,使用取模运算符可能不是确保良好分布的最佳方式。一个可能更好的方法是 (int)(NextDouble() * (MaxValue - 1));

您的代码有一个潜在的错误。如果 buffer 包含十六进制值 00 00 00 80,即 int.MinValueMath.Abs​​ 将抛出一个异常(exception)。

请注意,与调用 Random.Next 相比,在 RNGCryptoServiceProvider 上调用 GetBytes 非常慢。您最好调用 GetBytes 来填充更大的缓冲区,然后从中提取随机数。我的示例展示了这是如何完成的。

关于c# - RNGCryptoServiceProvider : generate random numbers in the range [0, randomMax),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6111960/

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