Math.random()的精度

jpc*_*826 14 javascript random

JavaScript的Math.random()功能精度是多少?

krs*_*rs1 10

Math.random() 生成一个16位小数的浮点数,大于或等于零且小于1.

  • Javascript浮点数是64位IEEE 754值,因此它不是*精确*16位小数. (6认同)

the*_*ten 8

它依赖于浏览器/ JavaScript引擎.

最大可能的精度是52位,因为Math.random返回0(包括)和1(不包括)之间的双精度浮点.这个最大值大约相当于16位小数,见Sly1024的答案.

实际上,许多浏览器的精度较低.这似乎是目前的状态:

多次运行以下代码,您将看到Chrome和Safari中的尾随21位始终为0.

console.log((Math.random() * Math.pow(2,53)).toString(2));


小智 5

根据维基百科:双精度浮点格式 小数部分是 52 位,我们知道数字将在 0 和 1 之间(我认为不包括 1),所以指数是 -1,剩下 52随机位。

52 个随机位为您提供 52 位精度,以 10 为基数约为

52*log10(2) ~= 15.653559774527022151114422525674 digits.
Run Code Online (Sandbox Code Playgroud)