Skip to content

Commit 326f1ee

Browse files
authored
BigInt перефразирование
1 parent c5c977f commit 326f1ee

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

1-js/02-first-steps/05-types/article.md

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,20 @@ n = 12.345;
6868

6969
## BigInt
7070

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> для отрицательных чисел.
7272

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+
Например, эти два числа (прямо за пределами безопасного диапазона) совпадают:
76+
77+
```js
78+
console.log(9007199254740991 + 1); // 9007199254740992
79+
console.log(9007199254740991 + 2); // 9007199254740992
80+
```
81+
82+
То есть все нечетные целые числа, большие чем <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») с микросекундами.
7485

7586
Тип `BigInt` был добавлен в JavaScript, чтобы дать возможность работать с целыми числами произвольной длины.
7687

@@ -81,7 +92,7 @@ n = 12.345;
8192
const bigInt = 1234567890123456789012345678901234567890n;
8293
```
8394

84-
Так как `BigInt`-числа нужны достаточно редко, мы рассмотрим их в отдельной главе <info:bigint>. Ознакомьтесь с ней, когда вам понадобятся настолько большие числа.
95+
Так как необходимость в использовании `BigInt`--чисел появляется достаточно редко, мы рассмотрим их в отдельной главе <info:bigint>. Ознакомьтесь с ней, когда вам понадобятся настолько большие числа.
8596

8697
```smart header="Поддержка"
8798
В данный момент `BigInt` поддерживается только в браузерах Firefox, Chrome, Edge и Safari, но не поддерживается в IE.

0 commit comments

Comments
 (0)