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

时间:2013-11-19 18:33:28

标签: java random

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

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

2 个答案:

答案 0 :(得分: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;
    }
}

这将以相同的概率返回任何有限双。

您不能只是上面的公式,因为(Double.MAX_VALUE - (-Double.MAX_VALUE))溢出到无穷大。即所有正负双值的范围太大而不能存储在双倍中。

答案 1 :(得分:3)

double d = Math.random() * Double.MAX_VALUE;
return Math.random() < 0.5 ? d : 0-d;