为什么.NET中的Random.Next方法不支持float / double?

时间:2009-01-09 17:15:50

标签: c# .net math

所以也许我希望将-1.0和1.0之间的值作为浮点数。使用IMO扩展方法将其写入并将其固定在顶部是笨拙的。

8 个答案:

答案 0 :(得分:18)

还有.NextDouble()方法几乎完全符合您的要求 - 只需0到1.0而不是-1.0到1.0。

答案 1 :(得分:14)

public static double NextDouble(this Random rnd, double min, double max){
    return rnd.NextDouble() * (max - min) + min;
}

致电:

double x = rnd.NextDouble(-1, 1);

获取范围-1 <= x < 1

中的值

答案 2 :(得分:4)

因为大多数时候,我们想要一个范围内的int,所以我们提供了方法来做到这一点。许多语言仅支持随机方法,该方法返回介于0.0和1.0之间的double。 C#在.NextDouble()方法中提供此功能。

这是足够好的设计,因为它使常见的容易(滚动模具 - myRandom.Next(1,7);)和其他可能。 - myRandom.NextDouble()* 2.0 - 1.0;

答案 3 :(得分:3)

您可以使用Random.NextDouble()方法生成0.0到1.0之间的随机值,如@ Joel_Coehorn的建议

我只想补充一点,将范围扩展到-1.0和1.0是一个简单的计算

var r = new Random();

var randomValue = r.NextDouble() * 2.0 - 1.0

或者为了概括它,将NextDouble()结果扩展到任何范围(a,b),你可以这样做:

var randomValue = r.NextDouble() * (b - a) - a

答案 4 :(得分:1)

另一方面,我必须指出,最后,框架中的随机数生成算法并不笨拙(如cstdlib的rand()),但实际上是一个很好的实现(Park&amp;米勒,IIRC)。

答案 5 :(得分:0)

我见过的绝大部分随机数用法(实际上我所见过的,虽然显然是在三十年的编程中我没有看到太多)在指定范围内生成随机整数。

因此Random.Next对我来说似乎很方便。

答案 6 :(得分:0)

  

不得不写这个和笨拙   使用扩展方法将其固定在顶部

不是真的 - 扩展方法很简洁,我很高兴有这样的功能。

答案 7 :(得分:0)

这种方法并不难添加,似乎是扩展方法的完美用法。

public double NextSignedDouble(this Random r)
{
    return (r.Next(0, 2) == 0) ? r.NextDouble() : (r.NextDouble() * -1);
}