c# Double.MinValue 和 Double.MaxValue 之间的随机数
c# Random number between Double.MinValue and Double.MaxValue
我已经搜索 google 了,但还没有答案。
所以问题是,我需要创建随机生成器 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
.
我已经搜索 google 了,但还没有答案。
所以问题是,我需要创建随机生成器 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
.