如何用Math.random()在Java中模拟60%的概率



如果有60%的几率(只能使用Math.random(((,我想做点什么。例如,数组中的每个值都有60%的机会被设置为1,否则为0。

我的困惑是我们是否应该检查

if (Math.random() < 0.6) { ... }

if (Math.random() <= 0.6) { ... }

我的想法是它应该是第一个,因为0.0是一个可能的返回值,但我想确认我应该使用哪一个以及为什么。

使用<运算符。

虽然这是一种简化,但考虑到计算机通过添加形式2−n的项来存储分数。大多数实数无法精确表示,像0.6这样的文字会从有限集转换为最近的double值。

同样,random()函数不能从0到1之间的连续范围生成实值。相反,它从0到N−1范围内的N元素中选择一个整数,然后除以N+,得到[0,1(范围内的(有理(结果

由于零被视为元素之一,因此应包含的最大结果值为(p·N−1(/N。或者,换句话说,我们应该排除P·N/N,即P

排除p是导致使用<的原因。

当你考虑如何使用nextInt()这样的方法时,可能更容易推理。在那里,零对小范围的影响更明显,你的表达式显然会使用<运算符:current().nextInt(5) < 3。如果你把结果除以current().nextInt(5) / 5.0 < 0.6,这种情况不会改变。nextInt(5) / 5.0random()之间的区别只是后者在0和1之间有更多、更小的步长。

我很抱歉用我最初的回答误导了人们,并感谢纠正我的用户。

使用<。如果你想将赔率设置为0%,那么你可以将比较值更改为0。由于Math.random()可以返回0,因此使用<=不会导致0%的机会。正如其他人所指出的,Math.random()生成您正在测试的确切数字的几率极低,因此对于0以外的所有值,您永远不会注意到差异。

最新更新