You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/05-types/article.md
+14-3Lines changed: 14 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -68,9 +68,20 @@ n = 12.345;
68
68
69
69
## BigInt
70
70
71
-
В JavaScript тип `number` не может безопасно работать с числами, большими, чем <code>(2<sup>53</sup>-1)</code> (т. е. `9007199254740991`) или меньшими, чем <code>-(2<sup>53</sup>-1)</code> для отрицательных чисел. Технически, тип `number` может хранить и гораздо большие значения (вплоть до <code>1.7976931348623157 * 10<sup>308</sup></code>), однако за пределами безопасного диапазона <code>±(2<sup>53</sup>-1)</code> многие из чисел не могут быть представлены с помощью этого типа данных из-за ограничений, вызванных внутренним представлением чисел в двоичной форме. Например, нечётные числа, большие, чем <code>(2<sup>53</sup>-1)</code>, невозможно хранить при помощи типа `number`, они с разной точностью будут автоматически округляться до чётных значений. В то же время некоторые чётные числа, большие, чем <code>(2<sup>53</sup>-1)</code>, при помощи типа `number` хранить технически возможно (однако не стоит этого делать во избежание дальнейших ошибок).
71
+
В JavaScript тип `number` не может безопасно работать с числами, большими, чем <code>(2<sup>53</sup>-1)</code> (т. е. `9007199254740991`) или меньшими, чем <code>-(2<sup>53</sup>-1)</code> для отрицательных чисел.
72
72
73
-
Для большинства случаев достаточно безопасного диапазона чисел от <code>-(2<sup>53</sup>-1)</code> до <code>(2<sup>53</sup>-1)</code>. Но иногда нам нужен диапазон действительно гигантских целых чисел без каких-либо ограничений или пропущенных значений внутри него. Например, в криптографии или при использовании метки времени ("timestamp") с микросекундами.
73
+
Если говорить совсем точно, то, технически, тип `number`*может* хранить большие целые числа (до <code>1.7976931348623157*10<sup>308</sup></code>), но за пределами безопасного диапазона целых чисел <code>±(2<sup>53</sup>-1)</code> будет ошибка точности, так как не все цифры помещаются в фиксированную 64-битную память. Поэтому можно хранить "приблизительное" значение.
74
+
75
+
Например, эти два числа (прямо за пределами безопасного диапазона) совпадают:
То есть все нечетные целые числа, большие чем <code>(2<sup>53</sup>-1)</code>, вообще не могут храниться в типе `number`.
83
+
84
+
В большинстве случаев безопасного диапазона чисел от <code>-(2<sup>53</sup>-1)</code> до <code>(2<sup>53</sup>-1)</code> вполне достаточно, но иногда нам требуется весь диапазон действительно гигантских целых чисел без каких-либо ограничений или пропущенных значений внутри него. Например, в криптографии или при использовании метки времени («timestamp») с микросекундами.
74
85
75
86
Тип `BigInt` был добавлен в JavaScript, чтобы дать возможность работать с целыми числами произвольной длины.
Так как `BigInt`-числа нужны достаточно редко, мы рассмотрим их в отдельной главе <info:bigint>. Ознакомьтесь с ней, когда вам понадобятся настолько большие числа.
95
+
Так как необходимость в использовании `BigInt`--чисел появляется достаточно редко, мы рассмотрим их в отдельной главе <info:bigint>. Ознакомьтесь с ней, когда вам понадобятся настолько большие числа.
85
96
86
97
```smart header="Поддержка"
87
98
В данный момент `BigInt` поддерживается только в браузерах Firefox, Chrome, Edge и Safari, но не поддерживается в IE.
0 commit comments