2013-04-15 102 views
3

我想找出一种方法来生成1/2和-1/2之间的随机值。如何生成-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); 
     } 
    } 
+0

为什么不直接产生随机整数在1和一些大数n之间,并乘以点数1000或类似的东西? –

回答

9

Math.random()返回01之间的随机双,这样的范围更改为-1/21/2,我们就可以减去1/2(因为0 - 1/2 = -1/21 - 1/2 = 1/2):

Math.random() - 0.5 

你现在正在做的是更普遍的,也就是说,如果你想minmax之间的双合适的表达会

min + Math.random() * (max - min) 

在这种情况下,在min = -0.5max = 0.5堵我们

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

这简化到

Math.random() - 0.5 

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

+4

注意范围将是[-1/2,1/2)。它不会选择完全1/2,但它会选择-1/2 – Justin

+0

@gangqinlaohu谢谢,我编辑提及 – arshajii

+2

如果你想(-1/2,1/2),你可以做0.5 - x而不是x - 0.5 – Thilo

5

你可能只是做:

Math.random() - 0.5 

这是因为Math.random()最小为0,最大为1。如果你减去一半,最小将是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); 
    } 
} 
1

记住,在的Math.random()类将返回0和1之间的值,不包括1

在这种情况下,Math.Random()-0.5将工作娇声

相关问题