我谨随机产生一个浮点之间的数2值。什么是最好的方式做到这一点在C#?

有帮助吗?

解决方案

我唯一想补充以 Eric's响应是一个解释;我认识为什么代码工作是更好的比知道什么代码的工作。

的解释是这样的:让我们说你想一个数字之间的2.5、4.5.范围是2.0(4.5-2.5). NextDouble 只有返回之间的数字在0和1.0,但是如果你乘此范围内,你会得到一个数量之间的和0 范围.

因此,这会给我们随机的双人之间的0.0和2.0:

rng.NextDouble() * 2.0

但是,我们希望他们之间的2.5、4.5!我们怎么做这个?增加最小的数字,2.5:

2.5 + rng.NextDouble() * 2.0

现在,我们得到一个数字之间的0.0和2.0;如果你增加2.5到的每一个这些价值观,我们看到,范围是现在之间的2.5、4.5.

起初我以为它重要的,如果b>的一个或一个>b,但是如果你的工作这两种方法的你会找到它可以作出相同的,只要你不要搞乱了秩序的变量使用。我要表示,它与长的变量名称,所以我不得混合起来:

double NextDouble(Random rng, double min, double max)
{
    return min + (rng.NextDouble() * (max - min));
}

其他提示

System.Random r = new System.Random();

double rnd( double a, double b )
{
   return a + r.NextDouble()*(b-a);
}
// generate a random number starting with 5 and less than 15
Random r = new Random();
int num = r.Next(5, 15);  

双打你可以替换下与NextDouble

这是一段如何获得Cryographically安全随机数字:这将填补在8个字节与crytographically强列随机的价值观。

byte[] salt = new byte[8];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(salt);

欲了解更多详情,请参阅 如何随机是你的随机的??" (灵感来自一个CodingHorror条在甲板上洗牌)

如何随机的?如果你能处理伪随机的那么简单:

Random randNum = new Random();
randNum. NextDouble(Min, Max);

如果你想要一个"更好"随机数字,然后你也许应该看看梅森难题的算法。很多人。 已经实现了它 对于你,尽管

对于一个解释为什么长角已经downmodded这么多: http://msdn.microsoft.com/en-us/magazine/cc163367.aspx 看起来对执行NextDouble和解释什么是一个随机的一倍。

链接也是一种黏性物质的例子如何使用加密随机数字(如Sameer提到的)只有实际的有用的产出,而不是有点流。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top