首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Math.random范围负

Math.random范围负
EN

Stack Overflow用户
提问于 2018-03-28 22:57:23
回答 2查看 2.1K关注 0票数 1

如果我要做的话: Math.random() * 4-2

这能给我一个范围(-2,2),2是独家的吗?我认为这是正确的,但我很少得到正数(是的,我知道这是一种随机算法,我们需要随机无限地生成它才能感觉到,但我只想确定)

新问题

如果我想要从-1到1的所有随机有理数,这两个界都包含在内,这一行会工作吗: Math.random() * 2.0000000000000001 - 1;

我查过小数点后的两位数,大约可以存储52位--这大约是16位,大约是0在这个点上的数。

我正在做的项目是用蒙特卡罗模拟来估计π的数字,如果你对此有任何了解的话,也许你就能理解我为什么要问这些东西了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-28 23:17:06

这能给我一个范围(-2,2),2是独家的吗?

是的,Math.random() * 4-2在-2到1的范围内给出了4种可能性。

您将需要更多的运行来检查发行版。

代码语言:javascript
运行
复制
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万次运行的测试表明,随机数分布很好:

代码语言:javascript
运行
复制
Occurrences for -2: 24.9779%
Occurrences for -1: 25.0338%
Occurrences for 0: 24.971%
Occurrences for 1: 25.0173%
票数 3
EN

Stack Overflow用户

发布于 2018-03-28 23:09:42

Math.random()返回一个范围为[0,1.0)的值,因此表达式应该返回值[ -2.0,2.0),其中2.0是独占的,-2.0是包含的。

Math.random()是一个伪随机数生成器,因此可以解释您的负数趋势。如果您想得到更好的值分布,您会想要查看真正的随机数生成的实现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49545484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档