I Shar

I Shar

мир глазами веб-разработчика

JavaScript: MAX_NUMBER_SAFE

что следует за самым большим числом в JavaScript

I Shar

время чтения 2 мин.

Photo by Mike Doherty on Unsplash

В 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


Спасибо за внимание.

    • frontend
    • js

Новые публикации

Далее

Категории

О нас

Frontend & Backend. Статьи, обзоры, заметки, код, уроки.