gpt4 book ai didi

java - 给定范围内的随机 double 值,包括 [-MAX_VALUE,MAX_VALUE]

转载 作者:太空宇宙 更新时间:2023-11-04 09:27:21 28 4
gpt4 key购买 nike

如何实现能够将 +-Double.MAX_VALUE 作为参数处理的函数 getRandomDouble(min,max)

在线研究:

这个问题的大多数答案是:

public Double getRandomDouble(double min, double max) {
return min + (max-min)*Random.nextDouble();
}

如果 minmax 不是 +-Double.MAX_VALUE,则此方法可以正常工作。如果是这样,则 max-min 超出范围或无穷大。将参数更改为 BigDecimal 可以解决此问题,但结果始终是带有 50 个零且没有小数的 double 值。这是一个非常大的数字 (2*MAX_VALUE) 乘以 [0,1] 之间的 double 值(仅查看小数)的结果。

因此,我找到了 +-MAX_VALUE 的解决方案,如下所示:

public double getRandomDouble() {
while(true) {
double d = Double.longBitsToDouble(Random.nextLong());
if (d < Double.POSITIVE_INFINITY && d > Double.NEGATIVE_INFINITY)
return d;
}
}

这工作正常,但不考虑其他界限。

如何结合这两种方法来获得给定范围(可能是 +-MAX_VALUE)内的随机 double 值?

最佳答案

如果它不仅仅适用于最大值,我想我有一个解决方案。

从数学上讲,它应该是相同的:

您生成 2 个随机数并将它们相加。每个数字应介于 -maxValue/2+maxValue/2 之间。这样,总和将是 -maxValue+maxValue 之间的随机数。

public Double getRandomDouble(double min, double max) {
double halfMin = min/2;
double halfMax = max/2;
double sum = halfMin + (halfMax-halfMin)*Random.nextDouble();
return sum + (halfMin + (halfMax-halfMin)*Random.nextDouble());
}

关于java - 给定范围内的随机 double 值,包括 [-MAX_VALUE,MAX_VALUE],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57515251/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com