ECMAScript | Тип BigInt

ECMAScript | Тип BigInt

Тип BigInt представляет собой целочисленное значение. Значение может быть любого размера и не ограничено конкретной разрядностью. Обычно, если не указано иное, операции предназначены для получения точных математически обоснованных ответов. Для двоичных операций BigInts действуют как два дополнительных двоичных строки, с отрицательными числами, которые рассматриваются как имеющие биты, установленные бесконечно влево.

Значение BigInt::unit является 1.

 

6.1.6.2.1 BigInt::unaryMinus ( x )
6.1.6.2.2 BigInt::bitwiseNOT ( x )
6.1.6.2.3 BigInt::exponentiate ( base, exponent )
6.1.6.2.4 BigInt::multiply ( x, y )
6.1.6.2.5 BigInt::divide ( x, y )
6.1.6.2.6 BigInt::remainder ( n, d )
6.1.6.2.7 BigInt::add ( x, y )
6.1.6.2.8 BigInt::subtract ( x, y )
6.1.6.2.9 BigInt::leftShift ( x, y )
6.1.6.2.10 BigInt::signedRightShift ( x, y )
6.1.6.2.11 BigInt::unsignedRightShift ( x, y )
6.1.6.2.12 BigInt::lessThan ( x, y )
6.1.6.2.13 BigInt::equal ( x, y )
6.1.6.2.14 BigInt::sameValue ( x, y )
6.1.6.2.15 BigInt::sameValueZero ( x, y )
6.1.6.2.16 BinaryAnd ( x, y )
6.1.6.2.17 BinaryOr ( x, y )
6.1.6.2.18 BinaryXor ( x, y )
6.1.6.2.19 BigIntBitwiseOp ( op, x, y )
6.1.6.2.20 BigInt::bitwiseAND ( x, y )
6.1.6.2.21 BigInt::bitwiseXOR ( x, y )
6.1.6.2.22 BigInt::bitwiseOR ( x, y )
6.1.6.2.23 BigInt::toString ( x )

 

6.1.6.2.1 BigInt::unaryMinus ( x )

Абстрактная операция BigInt :: unaryMinus принимает аргумент x (BigInt). При вызове он выполняет следующие шаги:

1. Если x равен 0ℤ, вернуть 0ℤ.
2. Верните значение BigInt, которое представляет собой отрицание ℝ (x).

 

6.1.6.2.2 BigInt::bitwiseNOT ( x )

Абстрактная операция BigInt :: bitwiseNOT принимает аргумент x (BigInt). Возвращает дополнение x до единицы; то есть -x — 1ℤ.

 

6.1.6.2.3 BigInt::exponentiate ( base, exponent )

Абстрактная операция BigInt :: exponentiate принимает аргументы base (BigInt) и экспоненты (BigInt). При вызове он выполняет следующие шаги:

1. Если показатель степени <0ℤ, выбросить исключение RangeError.
2. Если основание 0ℤ, а экспонента 0ℤ, верните 1ℤ.
3. Верните значение BigInt, которое представляет ℝ (основание) в степени (экспонента).

 

6.1.6.2.4 BigInt::multiply ( x, y )

Абстрактная операция BigInt :: multiply принимает аргументы x (BigInt) и y (BigInt). Он возвращает значение BigInt, которое представляет результат умножения x и y.

Примечание

Даже если результат имеет гораздо большую разрядность, чем входной, дается точный математический ответ.

 

6.1.6.2.5 BigInt::divide ( x, y )

Абстрактная операция BigInt :: div принимает аргументы x (BigInt) и y (BigInt). При вызове он выполняет следующие шаги:

1. Если y равно 0ℤ, выбросить исключение RangeError.
2. Пусть фактор равен (x) / ℝ (y).
3. Верните значение BigInt, которое представляет собой частное, округленное в сторону 0 до следующего целочисленного значения.

 

6.1.6.2.6 BigInt::remainder ( n, d )

Абстрактная операция BigInt :: stayder принимает аргументы n (BigInt) и d (BigInt). При вызове он выполняет следующие шаги:

1. Если d равно 0ℤ, выбросить исключение RangeError.
2. Если n равно 0ℤ, вернуть 0ℤ.
3. Пусть r — это BigInt, определяемый математическим соотношением r = n — (d × q), где q — это BigInt, отрицательный, только если n / d отрицательный, и положительный, только если n / d положительный, и величина которого равна как можно больше, не превышая величины истинного математического частного n и d.
4. Вернуть r.

Примечание

Знак результата равен знаку дивиденда.

 

6.1.6.2.7 BigInt::add ( x, y )

Абстрактная операция BigInt :: add принимает аргументы x (BigInt) и y (BigInt). Он возвращает значение BigInt, которое представляет собой сумму x и y.

 

6.1.6.2.8 BigInt::subtract ( x, y )

Абстрактная операция BigInt :: subtract принимает аргументы x (BigInt) и y (BigInt). Он возвращает значение BigInt, которое представляет разницу x минус y.

 

 

6.1.6.2.9 BigInt::leftShift ( x, y )

Абстрактная операция BigInt :: leftShift принимает аргументы x (BigInt) и y (BigInt). При вызове он выполняет следующие шаги:

1. Если y <0ℤ, то
а. Верните значение BigInt, представляющее ℝ (x) / 2-y, округленное до ближайшего целого числа, в том числе для отрицательных чисел.
2. Верните значение BigInt, которое представляет ℝ (x) × 2y.

Примечание

Семантика здесь должна быть эквивалентна поразрядному сдвигу, рассматривающему BigInt как строку бесконечной длины, состоящую из двоичных двух дополнительных цифр.

 

6.1.6.2.10 BigInt::signedRightShift ( x, y )

Абстрактная операция BigInt :: signedRightShift принимает аргументы x (BigInt) и y (BigInt). При вызове он выполняет следующие шаги:

1. Верните BigInt :: leftShift (x, -y).

 

6.1.6.2.11 BigInt::unsignedRightShift ( x, y )

Абстрактная операция BigInt :: unsignedRightShift принимает аргументы x (BigInt) и y (BigInt). При вызове он выполняет следующие шаги:

1. Вызвать исключение TypeError.

 

6.1.6.2.12 BigInt::lessThan ( x, y )

Абстрактная операция BigInt :: lessThan принимает аргументы x (BigInt) и y (BigInt). Он возвращает истину, если ℝ (x) <ℝ (y), и ложь в противном случае.

 

6.1.6.2.13 BigInt::equal ( x, y )

Абстрактная операция BigInt :: equal принимает аргументы x (BigInt) и y (BigInt). Он возвращает истину, если ℝ (x) = ℝ (y), и ложь в противном случае.

 

6.1.6.2.14 BigInt::sameValue ( x, y )

Абстрактная операция BigInt :: sameValue принимает аргументы x (BigInt) и y (BigInt). При вызове он выполняет следующие шаги:

1. Верните BigInt :: equal (x, y).

 

6.1.6.2.15 BigInt::sameValueZero ( x, y )

Абстрактная операция BigInt :: sameValueZero принимает аргументы x (BigInt) и y (BigInt). При вызове он выполняет следующие шаги:

1. Верните BigInt :: equal (x, y).

 

6.1.6.2.16 BinaryAnd ( x, y )

Абстрактная операция BinaryAnd принимает аргументы x (0 или 1) и y (0 или 1). При вызове он выполняет следующие шаги:

1. Если x равно 1, а y равно 1, верните 1.
2. В противном случае верните 0.

 

6.1.6.2.17 BinaryOr ( x, y )

Абстрактная операция BinaryOr принимает аргументы x (0 или 1) и y (0 или 1). При вызове он выполняет следующие шаги:

1. Если x равно 1 или y равно 1, верните 1.
2. В противном случае верните 0.

 

6.1.6.2.18 BinaryXor ( x, y )

Абстрактная операция BinaryXor принимает аргументы x (0 или 1) и y (0 или 1). При вызове он выполняет следующие шаги:

1. Если x равно 1, а y равно 0, верните 1.
2. Иначе, если x равно 0, а y равно 1, вернуть 1.
3. В противном случае верните 0.

 

 

6.1.6.2.19 BigIntBitwiseOp ( op, x, y )

Абстрактная операция BigIntBitwiseOp принимает аргументы op (&, ^ или |), x (BigInt) и y (BigInt). При вызове он выполняет следующие шаги:

1. Установите x равным ℝ (x).
2. Установите y равным ℝ (y).
3. Пусть результат будет 0.
4. Пусть shift равен 0.
5. Повторяйте до тех пор, пока (x = 0 или x = -1) и (y = 0 или y = -1),
а. Пусть xDigit будет x по модулю 2.
б. Пусть yDigit будет y по модулю 2.
c. Если op — &, установите результат равным result + 2shift × BinaryAnd (xDigit, yDigit).
d. В противном случае, если op равно |, установите результат равным result + 2shift × BinaryOr (xDigit, yDigit).
е. Еще,
я. Утверждение: op равно ^.
II. Установите результат равным result + 2shift × BinaryXor (xDigit, yDigit).
f. Установите shift на shift + 1.
грамм. Установите x равным (x — xDigit) / 2.
час Установите y на (y — yDigit) / 2.
6. Если op равно &, пусть tmp будет BinaryAnd (x по модулю 2, y по модулю 2).
7. Иначе, если op равно |, пусть tmp будет BinaryOr (x по модулю 2, y по модулю 2).
8. Иначе,
а. Утверждение: op равно ^.
б. Пусть tmp является BinaryXor (x по модулю 2, y по модулю 2).
9. Если tmp ≠ 0, то
а. Результат установить на результат — 2shift.
б. ПРИМЕЧАНИЕ: Это расширяет знак.
10. Верните значение BigInt для результата.

 

6.1.6.2.20 BigInt::bitwiseAND ( x, y )

Абстрактная операция BigInt :: bitwiseAND принимает аргументы x (BigInt) и y (BigInt). При вызове он выполняет следующие шаги:

1. Верните BigIntBitwiseOp (&, x, y).

 

6.1.6.2.21 BigInt::bitwiseXOR ( x, y )

Абстрактная операция BigInt :: bitwiseXOR принимает аргументы x (BigInt) и y (BigInt). При вызове он выполняет следующие шаги:

1. Верните BigIntBitwiseOp (^, x, y).

 

6.1.6.2.22 BigInt::bitwiseOR ( x, y )

Абстрактная операция BigInt :: bitwiseOR принимает аргументы x (BigInt) и y (BigInt). При вызове он выполняет следующие шаги:

1. Верните BigIntBitwiseOp (|, x, y).

 

6.1.6.2.23 BigInt::toString ( x )

Абстрактная операция BigInt :: toString принимает аргумент x (BigInt). Он преобразует x в формат String. При вызове он выполняет следующие шаги:

1. Если x <0ℤ, вернуть конкатенацию строки «-» и! BigInt :: toString (-x).
2. Верните значение String, состоящее из кодовых единиц цифр десятичного представления x.

 

 

Информационные ссылки

Стандарт ECMAScript — Раздел «6.1.6.2 The BigInt Type» — https://tc39.es/ecma262/#sec-ecmascript-language-types-bigint-type