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.MinValueDouble.MaxValue放入参数中,因为它生成“无限”无效双精度值(因为操作产生的值超出 64 位双精度值范围)。

有没有办法编写代码,以便即使使用Double.MinValueDouble.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.

以上是c#Double.MinValue和Double.MaxValue之间的随机数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>