Страницы

Поиск по вопросам

суббота, 21 декабря 2019 г.

Почему в обоих случаях неожиданный результат? [дубликат]

#javascript


        
             
                
                    
                        
                            This question already has answers here:
                            
                        
                    
                
                        
                            Отображение числа 9223372036854775807
                                
                                    (3 ответа)
                                
                        
                        
                            Вычисления на числах с плавающей точкой не работают
                                
                                    (2 ответа)
                                
                        
                                Закрыт 12 месяцев назад.
            
                    
В общем наткнулся вот на такой код:



var x = 9027199254741024;
console.log(x);
x = x + 1;
console.log(x);




Почему в обоих случаях один и тот же результат?

Если убрать один десяток, то все нормально складывается.

Если добавить десяток к начальному x, то тоже все нормально складывается=>переполнений
никаких нету.

А если сделать так, то вообще 2 отнимается вместо 1:



var x = 9027199254741010;
console.log(x);
x = x - 1;
console.log(x);




Вроде бы, тут все логично и складываются числа, а не строки.

Почему поведение такое неожиданное?

P.S Вопрос не является дублем, так как там идет речь про отображение, а конкретно
тут про арифметику.
    


Ответы

Ответ 1



Константа MAX_SAFE_INTEGER имеет значение 9007199254740991. Смысл этого числа в том, что в JavaScript используется формат чисел с плавающей запятой двойной точности, как определено в стандарте IEEE 754, а он может безопасно представлять числа только в диапазоне от -(2^53 - 1) до 2^53 - 1. Источник

Комментариев нет:

Отправить комментарий