Double.MIN_VALUE和Double.MAX_VALUE之间的随机加倍?

Jos*_*ett 0 java random

任何人都知道如何实现这一目标.我尝试了通常的公式,但我只得到正数<= 10:

Double.MIN_VALUE + Math.random() * ((Double.MAX_VALUE - Double.MIN_VALUE) + 1)

Pet*_*rey 6

你可以做到这一点

private static final Random rand = new Random();

public static double getRandomDouble() {
    while(true) {
        double d = Double.longBitsToDouble(rand.nextLong());
        if (d < Double.POSITIVE_INFINITY && d > Double.NEGATIVE_INFINITY)
            return d;
    }
}
Run Code Online (Sandbox Code Playgroud)

这将以相同的概率返回任何有限双精度.

你不仅可以将上面的公式作为(Double.MAX_VALUE - (-Double.MAX_VALUE))溢出到无穷大.即所有正负双值的范围太大而不能存储在双精度值中.