JavaScript: MAX_NUMBER_SAFE
что следует за самым большим числом в JavaScript
В JavaScript практически все цифровые значения соответствуют типу данных number
и хранятся в формате 64-битных чисел двойной точности с плавающей запятой. Максимальным достижимым значение при использовании такого формата является 2 в 53 степени минус 1, что соответствует числу 9007199254740991. Это девять квадриллионов семь триллионов сто девяносто девять миллиардов двести пятьдесят четыре миллиона семьсот сорок тысяч девятьсот девяносто один - такое число достаточно трудно запомнить, Поэтому в объекте Number
для него создана специальная статическая константа MAX_SAFE_INTEGER
. Но, что получится, если мы попробуем увеличить это число хотя бы на 1?
let x = Number.MAX_SAFE_INTEGER + 1,
y = Number.MAX_SAFE_INTEGER + 2;
console.log(x === y);
Какой результат будет выведен в консоли?
На первый взгляд переменные x
и y
отличаются на целую единицу, но все не так просто.
Когда мы прибавляем к MAX_SAFE_INTEGER
, результат будет получен в любом случае:
console.log(Number.MAX_SAFE_INTEGER); // 90071992547409919007199254740991
console.log(Number.MAX_SAFE_INTEGER + 1); // 90071992547409919007199254740992
Но, при дальнейшем увеличении числа происходит потеря точности:
console.log(Number.MAX_SAFE_INTEGER + 1); // 90071992547409919007199254740992
console.log(Number.MAX_SAFE_INTEGER + 2); // 90071992547409919007199254740992
То есть, прибавляя 1 или 2 к числу MAX_SAFE_INTEGER
, мы получим абсолютно одинаковый результат.
Именно поэтому, при использовании в проекте критически важных больших чисел необходимо переходить на тип данных BigInt
.
Ну а в консоли в результате выполнения кода будет выведено true
:
let x = Number.MAX_SAFE_INTEGER + 1, // 90071992547409919007199254740992
y = Number.MAX_SAFE_INTEGER + 2; // 90071992547409919007199254740992
console.log(x === y); true
Спасибо за внимание.