Javascript 数学的精确性
JavaScript的Javascript 数学的精确性,javascript,random,Javascript,Random,JavaScript的Math.random()函数的精度是多少?Math.random()生成一个16位小数的浮点数,大于或等于零,小于1。根据维基百科: 分数部分是52位,我们知道数字将在0到1之间(我想不包括1),所以指数是-1,剩下52个随机位 52个随机位提供52位精度,以10为基数大约为 52*log10(2) ~= 15.653559774527022151114422525674 digits. 它依赖于浏览器/JavaScript引擎 最大可能精度为52位,因为Math.ra
Math.random()
函数的精度是多少?Math.random()
生成一个16位小数的浮点数,大于或等于零,小于1。根据维基百科:
分数部分是52位,我们知道数字将在0到1之间(我想不包括1),所以指数是-1,剩下52个随机位
52个随机位提供52位精度,以10为基数大约为
52*log10(2) ~= 15.653559774527022151114422525674 digits.
它依赖于浏览器/JavaScript引擎 最大可能精度为52位,因为
Math.random
返回一个介于0(包含)和1(排除)之间的双精度浮点。这个最大值大约相当于16位小数,参见Sly1024的答案
实际上,许多浏览器给出的精度较小。这似乎是目前的状况:
- Firefox:完整的52个随机位李>
- V8/Chrome:32位精度(几年前它曾低至30位,请参阅)
- Safari:32位
- IE:
console.log((Math.random()*Math.pow(2,53)).toString(2))
Math.random()
是正确的函数。对,这就是我的意思。谢谢Javascript浮点数是64位IEEE 754值,所以它不是精确的16位小数。@volatile:如果精度不是10的幂。@Pointy这是真的,我的答案不精确。bump.你有关于这个精度的参考吗?IE11:52个随机位,尽管上面的代码有时会给出类似11100000010101010001011001101111011100011101110.1
的结果。Chrome似乎已经提高了它们的精度,但我无法再观察21个0位。Chrome(作为扩展,所有基于Blink的浏览器和基于V8的产品,如Electron apps和Node.js)在2015年将Math.random()精度更新为128位。