java Math.random()从-N到N

java Math.random()从-N到N,java,Java,我需要在-N和N之间随机选取一个数字(在java中,使用Math.random())。具体来说,在本例中,我需要在-1和1之间选取一个随机数。我发现的所有结果都解释了如何在一些正数之间找到一个随机数 现在我用的是这句话,它只涵盖了我需要的一半 double i = Math.random(); 只需使用: 2 * Math.random() - 1 对于-n和n之间的随机数: /** * @return a random number, r, in the range -n <= r

我需要在-N和N之间随机选取一个数字(在java中,使用Math.random())。具体来说,在本例中,我需要在-1和1之间选取一个随机数。我发现的所有结果都解释了如何在一些正数之间找到一个随机数

现在我用的是这句话,它只涵盖了我需要的一半

double i = Math.random();
只需使用:

2 * Math.random() - 1

对于-n和n之间的随机数:

/**
 * @return a random number, r, in the range -n <= r < n
 */
public static double getRandom(double n) {
   return Math.random()*n*2 - n;
}
/**
*@返回一个随机数r,范围为-n试试这个:

double n = 1.0;
double range = 2 * n;
double value = range * Math.random() - n;
您可以修改
n
值以更改生成的最大值/最小值,例如,如果您需要范围
[-10,10)
中的随机数,则让
n=10.0;

使用random on

(0, 32767+32768) then subtract by 32768

生成介于
0和65535之间的数字,然后减去32768

生成在一定范围内均匀分布的随机数(最小值、最大值)的一般公式为:

在您的情况下,
max==-min==N
。只需插入值并简化:

2 * N * rand.nextDouble() - N

挑刺,但范围实际上是
-n真的,但等式成立的概率约为40亿分之一,极限实际上是最大值的2倍。也许它会被命名为
range
?恶心,恶心,但只是为了好玩:
double i=Math.random()*(Math.random()>5?-1:1);
。(尽管与典型解决方案相比,这提供了2倍的数量)
2 * N * rand.nextDouble() - N