Ven*_*sky 5 javascript floating-point precision
在使用Math.randomjavascript时,我遇到了一个有趣的问题。
根据文档,它产生一个“0到小于1范围内的伪随机数”,但是它可以产生的最大数字是多少,小于1?
我编写了这个愚蠢的代码来尝试获得最高值
maxIteration = 1000000000
value = 0
count = 0
while(value < 1 && count++ < maxIteration) {
let newValue = Math.random()
value = value < newValue ? newValue : value
}
console.log('value', value)
console.log('count', count)
Run Code Online (Sandbox Code Playgroud)
我能得到的最高是0.9999999989486876,但它是最高的吗?
您可以查看数字文档以了解浮点详细信息。
TLDR:数字类型是双精度 64 位二进制格式 IEEE 754 值。数字仅保留小数点后 17 位左右的精度;算术需要四舍五入。
var minValue = Number.MIN_VALUE; // 5e-324
// (1 - minValue) == 1
var maxRandom = 1 - 10e-17; // ~= as 1 - (2e-53)
document.body.innerHTML = 'Number.MIN_VALUE = '+ minValue + '<br>maxRandom = ' + maxRandom;Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1234 次 |
| 最近记录: |