You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript的Math.random()真的能返回0吗?实测疑问与分析

Math.random() 真的能返回0吗?

根据MDN的定义,Math.random()确实会返回大于等于0且小于1的伪随机数,理论上存在返回0的可能,但这个事件的概率极低,低到你在常规测试中几乎不可能碰到。

为什么你的测试没出现0?

现代JavaScript引擎(包括Node.js v18使用的V8引擎)中,Math.random()的底层实现通常基于64位伪随机数生成算法(比如xorshift128+)。它的逻辑是生成一个0到264-1之间的整数,然后除以264,得到[0, 1)区间的浮点数:

  • 当生成的整数为0时,结果就是0;
  • 其他情况则是介于(0, 1)之间的数。

得到0的概率是**1/264**,也就是约1/(1.8×1019)。你15分钟的测试,就算每秒能生成1亿次随机数(实际因为循环里有console.log,实际次数远低于这个数),总次数也只有约9×1010次——这个量级和1.8×1019比,差了8个数量级,相当于你在地球上找一粒特定的沙子,概率都比这个高。

你得到的最小数值5.2724491439448684e-12,对应的是生成的整数约为9.48×10^7,离0还有很大距离,完全符合伪随机数的分布规律。

你的测试代码

let countSmallNumber = 0;
let temp = 0;
console.time("loopTime");
while (countSmallNumber < 10) {
    temp = Math.random();
    if (temp < 0.0000000001) {
        countSmallNumber++;
        console.log(`almost 0 => ${temp}`);
    }
}
console.timeEnd("loopTime");

内容的提问来源于stack exchange,提问作者Wahid Feb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 13:10:30