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

Lea*_*ner 3 java random math

我试图找出一种方法来生成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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

ars*_*jii 9

那么Math.random()0和之间返回一个随机的双1,所以要将范围更改-1/21/2,我们可以减去1/2(自0 - 1/2 = -1/21 - 1/2 = 1/2):

Math.random() - 0.5
Run Code Online (Sandbox Code Playgroud)

你现在正在做的是更一般的,即如果你想要一个双倍之间minmax适当的表达式

min + Math.random() * (max - min)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,插入min = -0.5max = 0.5我们有

-0.5 + Math.random() * (0.5 - -0.5)
Run Code Online (Sandbox Code Playgroud)

这简化为

Math.random() - 0.5
Run Code Online (Sandbox Code Playgroud)

我还要提一下,如果你阅读random()方法的文档,你会发现它返回一个大于或等于 0.0且小于 1.0 的double .这意味着上面的表达式应该在该范围内产生一个数字[-0.5, 0.5),这意味着-0.5可能会返回但0.5不能返回.

  • 请注意,范围将是[-1/2,1/2).它永远不会选择1/2,但它会选择-1/2 (4认同)
  • 如果你想要(-1/2,1/2),你可以做0.5 - x而不是x - 0.5 (2认同)

Doo*_*nob 5

你可以这样做:

Math.random() - 0.5
Run Code Online (Sandbox Code Playgroud)

这是因为min Math.random()为0,最大值为1.如果减去一半,则min将为0 - 0.5 == -0.5最大值1 - 0.5 == 0.5.

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

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);
    }
}
Run Code Online (Sandbox Code Playgroud)