如何生成-1/2到1/2之间的随机值

时间:2013-04-15 23:11:51

标签: java math random

我试图找出一种在1/2和-1/2之间生成随机值的方法。

我尝试了以下内容,但不确定这是否是正确的方法....

有人可以让我知道实现这个的好方法吗?

public static void main(String args[]) {
        double Max = .5;
        double Min = -0.5;
        for (int i = 0; i < 10000; i++) {
            double value = Min + ((Math.random()) * (Max - Min));
            System.out.println(value);
        }
    }

3 个答案:

答案 0 :(得分:9)

Math.random()会在01之间返回一个随机双倍,所以要将范围更改为-1/21/2,我们可以减去{{ 1}}(自1/20 - 1/2 = -1/2):

1 - 1/2 = 1/2

您现在正在做的更为一般,即如果您想在Math.random() - 0.5 min之间加倍,则适当的表达式将是

max

在这种情况下,请插入min + Math.random() * (max - min) min = -0.5

max = 0.5

简化为

-0.5 + Math.random() * (0.5 - -0.5)

我还应该提一下,如果你阅读Math.random() - 0.5 方法的文档,你会发现它返回一个大于或等于的双到0.0和小于 1.0。这意味着上面的表达式应该生成random()范围内的数字,这意味着可能会返回[-0.5, 0.5),但-0.5不能返回。{/ p>

答案 1 :(得分:5)

你可以这样做:

Math.random() - 0.5

这是因为Math.random()的最小值为0,最大值为1.如果减去一半,则最小值为0 - 0.5 == -0.5,最大值为1 - 0.5 == 0.5。< / p>

因此,您的原始代码可以缩短为:

public static void main(String args[]) {
    for (int i = 0; i < 10000; i++) {
        double value = Math.random() - 0.5; // no need for a "double" cast,
                                            // Math.random() returns a double
        System.out.println(value);
    }
}

答案 2 :(得分:1)

请记住,Math.Random()类将返回0到1之间的值,不包括1.

在这种情况下,Math.Random()-0.5会甜蜜地工作