【发布时间】:2011-03-21 15:24:48
【问题描述】:
JavaScript 的Math.random() 函数的精度是多少?
【问题讨论】:
-
Math.random()是正确的函数。 -
对,我就是这个意思。谢谢!
标签: javascript random
JavaScript 的Math.random() 函数的精度是多少?
【问题讨论】:
Math.random() 是正确的函数。
标签: javascript random
它取决于浏览器/JavaScript 引擎。
可能的最大精度为 52 位,因为Math.random 返回一个介于 0(包括)和 1(不包括)之间的双精度浮点数。此最大值对应于大约 16 位小数,请参阅 Sly1024 的答案。
实际上,许多浏览器给出的精度较低。这似乎是当前状态:
多次运行以下代码,您会看到在 Chrome 和 Safari 中尾随的 21 位始终为 0。
console.log((Math.random() * Math.pow(2,53)).toString(2));
【讨论】:
111000000101010100010110011011110111000111010101110.1 的结果。
根据维基百科:Double-precision floating-point format 小数部分是 52 位,我们知道这个数字将介于 0 和 1 之间(我认为不包括 1),所以指数是 -1,剩下 52 个随机位。
52 个随机位为您提供 52 位精度,以 10 为底大约是
52*log10(2) ~= 15.653559774527022151114422525674 digits.
【讨论】:
Math.random() 生成大于等于 0 且小于 1 的 16 位小数的浮点数。
【讨论】: