Javascript 浮点:增加1时断点不起任何作用

Javascript 浮点:增加1时断点不起任何作用,javascript,floating-point,numbers,Javascript,Floating Point,Numbers,Float是一个数字的近似值 123456789012134567890===123456789012134567891为true 当 1234567890==1234567891isfalse 什么是断点,其中num===num+1 我做了这个代码来找出它,但它只是需要太长时间 for(var i = 0;;){ var old = i; if(++i === old) break; } console.log(i); 检查控制台中的数字。您将看到第一个示例在第17位之后截断

Float是一个数字的近似值

123456789012134567890===123456789012134567891
true

1234567890==1234567891
is
false

什么是断点,其中
num===num+1

我做了这个代码来找出它,但它只是需要太长时间

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

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

JavaScript浮点的断点。

断点是253


通过尝试和错误找到断点: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);
var n=1;
while(true){
n*=2;
如果(n==n+1){
打破
}
}
变量a=数学四舍五入(n/2);
var b=n;
而(a

演示:

这并没有回答问题,它给人一种关于浮点舍入如何工作的误导性印象。好的,谢谢。负片也是一样的。顺便说一句,你是怎么找到的?
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);