如果我要做的话: Math.random() * 4-2
这能给我一个范围(-2,2),2是独家的吗?我认为这是正确的,但我很少得到正数(是的,我知道这是一种随机算法,我们需要随机无限地生成它才能感觉到,但我只想确定)
新问题
如果我想要从-1到1的所有随机有理数,这两个界都包含在内,这一行会工作吗: Math.random() * 2.0000000000000001 - 1;
我查过小数点后的两位数,大约可以存储52位--这大约是16位,大约是0在这个点上的数。
我正在做的项目是用蒙特卡罗模拟来估计π的数字,如果你对此有任何了解的话,也许你就能理解我为什么要问这些东西了。
发布于 2018-03-28 23:17:06
这能给我一个范围(-2,2),2是独家的吗?
是的,Math.random() * 4-2在-2到1的范围内给出了4种可能性。
您将需要更多的运行来检查发行版。
int[] occ = new int[4];
for(int x=0; x<1000000; x++){
int rand = (int)(Math.random() * 4)-2;
occ[rand+2] ++;
}
System.out.println("Occurrences for -2: " + occ[0]/10000.0 + "%");
System.out.println("Occurrences for -1: " + occ[1]/10000.0 + "%");
System.out.println("Occurrences for 0: " + occ[2]/10000.0 + "%");
System.out.println("Occurrences for 1: " + occ[3]/10000.0 + "%");对100万次运行的测试表明,随机数分布很好:
Occurrences for -2: 24.9779%
Occurrences for -1: 25.0338%
Occurrences for 0: 24.971%
Occurrences for 1: 25.0173%发布于 2018-03-28 23:09:42
Math.random()返回一个范围为[0,1.0)的值,因此表达式应该返回值[ -2.0,2.0),其中2.0是独占的,-2.0是包含的。
Math.random()是一个伪随机数生成器,因此可以解释您的负数趋势。如果您想得到更好的值分布,您会想要查看真正的随机数生成的实现。
https://stackoverflow.com/questions/49545484
复制相似问题