c#Double.MinValue和Double.MaxValue之间的随机数
c#
我已经用谷歌搜索过了,但还没有答案。
所以问题是,我需要创建随机生成器 API 如下:
public static Double Range(Double minValue, Double maxValue)
{
return random.NextDouble() * (maxValue - minValue) + minValue; // random is just System.Random
}
一切正常,直到我将Double.MinValue和Double.MaxValue放入参数中,因为它生成“无限”无效双精度值(因为操作产生的值超出 64 位双精度值范围)。
有没有办法编写代码,以便即使使用Double.MinValue和Double.MaxValue也可以处理和生成有效的双精度值?
回答
考虑将计算随机双精度的逻辑更改为类似
private static Double Range(Double minValue, Double maxValue)
{
var x = random.NextDouble();
return x * maxValue + (1 - x) * minValue;
}
你失败的原因是因为double.MinValue
会是负面的,因此如果你这样做,maxValue - minValue
你本质上就是在做double.MaxValue * 2
.
- You don't put a `new Random()` inside a method like that, you pass it as a parameter.
THE END
二维码