Float:增加1时的断点不起作用

时间:2014-06-10 05:53:30

标签: javascript floating-point numbers

Float是数字的近似值。

12345678901234567890 === 12345678901234567891true

,而

1234567890 === 1234567891false

num === num+1的断点是什么?

我制作了这段代码以便找到它,但它只需要太长时间......

for(var i = 0;;){
    var old = i;
    if(++i === old) break;
}
console.log(i);

3 个答案:

答案 0 :(得分:3)

断裂点为2 53

console.log(9007199254740992 === 9007199254740993);
# true
console.log(9007199254740991 === 9007199254740992);
# false

答案 1 :(得分:0)

检查控制台中的数字。您将看到第17个数字之后的第一个示例截断。

enter image description here

Here's documentation JavaScript浮点。

答案 2 :(得分:0)

通过反复试验找到了突破点:9007199254740991,9007199254740992

var n = 1;
while (true) {
    n *= 2;
    if (n === n+1) {
        break;
    }
}

var a = Math.round(n/2);
var b = n;
while (a < b-1) {
    var m = Math.round((a + b) / 2);
    if (m === m+1) {
        b = m;
    } else {
        a = m;
    }
}
console.log(a);
console.log(b);

演示:http://jsfiddle.net/gEdRh/