diff --git a/files/ru/web/javascript/reference/global_objects/number/max_safe_integer/index.md b/files/ru/web/javascript/reference/global_objects/number/max_safe_integer/index.md index ef06b5976d08cc..3452bdee3fc00a 100644 --- a/files/ru/web/javascript/reference/global_objects/number/max_safe_integer/index.md +++ b/files/ru/web/javascript/reference/global_objects/number/max_safe_integer/index.md @@ -1,35 +1,44 @@ --- title: Number.MAX_SAFE_INTEGER slug: Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER +l10n: + sourceCommit: fcd80ee4c8477b6f73553bfada841781cf74cf46 --- {{JSRef}} -## Сводка +Статическое свойство **`Number.MAX_SAFE_INTEGER`** представляет максимальное безопасное целочисленное значение в JavaScript (253 – 1). -Константа **`Number.MAX_SAFE_INTEGER`** представляет максимальное безопасное целочисленное значение в JavaScript (`253 - 1`). +Для бо́льших целых чисел используется {{jsxref("BigInt")}}. + +{{EmbedInteractiveExample("pages/js/number-maxsafeinteger.html")}} + +## Значение + +`9007199254740991` (9,007,199,254,740,991 или приблизительно 9 квадриллионов). {{js_property_attributes(0, 0, 0)}} ## Описание -Константа `MAX_SAFE_INTEGER` имеет значение `9007199254740991`. Смысл этого числа в том, что в JavaScript используется [формат чисел с плавающей запятой двойной точности](https://ru.wikipedia.org/wiki/Число_двойной_точности), как определено в стандарте [IEEE 754](https://ru.wikipedia.org/wiki/IEEE_754), а он может безопасно представлять числа только в диапазоне от `-(253 - 1)` до `253 - 1`. +[Формат чисел с плавающей запятой двойной точности](https://ru.wikipedia.org/wiki/Число_двойной_точности) имеет только 52 бита для представления [мантиссы](/ru/docs/Web/JavaScript/Reference/Global_Objects/Number#number_encoding), поэтому он может безопасно представлять целые числа в диапазоне от -(253 – 1) до 253 – 1. «Безопасность» в этом контексте означает способность точно представлять целые числа и правильно их сравнивать. Например, `Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2` будет иметь истинное значение, что математически неверно. Больше информации в {{jsxref("Number.isSafeInteger()")}}. -Поскольку `MAX_SAFE_INTEGER` является статическим свойством объекта {{jsxref("Global_Objects/Number", "Number")}}, вы всегда должны использовать его как `Number.MAX_SAFE_INTEGER`, а не как свойство созданного вами объекта {{jsxref("Global_Objects/Number", "Number")}}. +Поскольку `MAX_SAFE_INTEGER` является статическим свойством объекта {{jsxref("Number")}}, вы всегда должны использовать его как `Number.MAX_SAFE_INTEGER`, а не как свойство числового значения. ## Примеры +### Значение MAX_SAFE_INTEGER + ```js Number.MAX_SAFE_INTEGER; // 9007199254740991 -Math.pow(2, 53) - 1; // 9007199254740991 ``` -## Полифил +### Связь между MAX_SAFE_INTEGER и EPSILON + +{{jsxref("Number.EPSILON")}} — это 2-52, а `MAX_SAFE_INTEGER` — это (253 – 1), оба значения являются производными от размера мантиссы, который составляет 53 бита (при этом старший бит всегда равен 1). Их умножение даст значение, очень близкое (но не равное) 2. ```js -if (!Number.MAX_SAFE_INTEGER) { - Number.MAX_SAFE_INTEGER = 9007199254740991; // Math.pow(2, 53) - 1; -} +Number.MAX_SAFE_INTEGER * Number.EPSILON; // 1.9999999999999998 ``` ## Спецификации @@ -42,5 +51,7 @@ if (!Number.MAX_SAFE_INTEGER) { ## Смотрите также +- [Полифил `Number.MAX_SAFE_INTEGER` в `core-js`](https://github.com/zloirock/core-js#ecmascript-number) - {{jsxref("Number.MIN_SAFE_INTEGER")}} - {{jsxref("Number.isSafeInteger()")}} +- {{jsxref("BigInt")}}