【发布时间】:2021-04-30 05:05:56
【问题描述】:
我已经通过谷歌搜索了,但还没有答案。
所以问题是,我需要创建如下随机生成器 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 时也能处理和生成有效的双精度数?
【问题讨论】:
-
考虑调用 random 两次 - 一次获取值,另一次获取符号。然后
return random.NextDouble() * double.MaxValue * sign;注意这可能不一定会返回MaxValue和MinValue本身——但它会非常接近。 请注意,这可能会或可能不会为您提供您希望的值分布。 -
即使你完成了这项工作,它也不会给出你期望的结果,因为范围很广。您的代码真的可以处理非常小 (-1E100) 非常小 (1E-100) 或非常大 (1E100) 的随机数吗?
标签: c# random double min infinite