BigInt â Ñе ÑпеÑÑалÑний ÑиÑловий Ñип, Ñкий забезпеÑÑÑ Ð¿ÑдÑÑÐ¸Ð¼ÐºÑ ÑÑлиÑ
ÑиÑел довÑлÑÐ½Ð¾Ñ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸.
Bigint ÑÑвоÑÑÑÑÑÑÑ ÑлÑÑ
ом Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ n до кÑнÑÑ ÑÑлоÑиÑелÑного лÑÑеÑÐ°Ð»Ñ Ð°Ð±Ð¾ викликом ÑÑнкÑÑÑ BigInt, Ñка ÑÑвоÑÑÑ Ð²ÐµÐ»Ð¸ÐºÑ ÑиÑла з ÑÑдкÑв, ÑиÑел ÑоÑо.
const bigint = 1234567890123456789012345678901234567890n;
const sameBigint = BigInt("1234567890123456789012345678901234567890");
const bigintFromNumber = BigInt(10); // Ñе Ñаме Ñо Ñ 10n
ÐаÑемаÑиÑÐ½Ñ Ð¾Ð¿ÐµÑаÑоÑи
BigInt можна викоÑиÑÑовÑваÑи Ñк звиÑайне ÑиÑло, напÑиклад:
alert(1n + 2n); // 3
alert(5n / 2n); // 2
ÐвеÑнÑÑÑ ÑвагÑ: подÑл 5/2 повеÑÑÐ°Ñ ÑезÑлÑÑаÑ, окÑÑглений до нÑлÑ, без деÑÑÑÐºÐ¾Ð²Ð¾Ñ ÑаÑÑини. УÑÑ Ð¾Ð¿ÐµÑаÑÑÑ Ð½Ð°Ð´ великими ÑиÑлами повеÑÑаÑÑÑ Ð²ÐµÐ»Ð¸ÐºÑ ÑиÑла.
Ðи не можемо змÑÑÑваÑи Ð²ÐµÐ»Ð¸ÐºÑ Ñа звиÑÐ°Ð¹Ð½Ñ ÑиÑла:
alert(1n + 2); // Error: Cannot mix BigInt and other types
Ðи Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ñвно конвеÑÑÑваÑи ÑÑ
, ÑкÑо поÑÑÑбно: викоÑиÑÑовÑÑÑи BigInt() або Number(), напÑиклад:
let bigint = 1n;
let number = 2;
// ÑиÑло Ñ Ð²ÐµÐ»Ð¸ÐºÐµ ÑиÑло
alert(bigint + BigInt(number)); // 3
// велике ÑиÑло Ñ ÑиÑло
alert(Number(bigint) + number); // 3
ÐпеÑаÑÑÑ Ð¿ÐµÑеÑвоÑÐµÐ½Ð½Ñ Ð·Ð°Ð²Ð¶Ð´Ð¸ безÑÑмнÑ, нÑколи не даÑÑÑ Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº, але ÑкÑо велиÑе ÑиÑло занадÑо велике Ñ Ð½Ðµ вÑдповÑÐ´Ð°Ñ ÑÐ¸Ð¿Ñ ÑиÑла, Ñо Ð·Ð°Ð¹Ð²Ñ Ð±ÑÑи бÑдÑÑÑ Ð²ÑдÑÑзанÑ, ÑÐ¾Ð¼Ñ Ð¼Ð¸ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð±ÑÑи обеÑежними, виконÑÑÑи Ñаке пеÑеÑвоÑеннÑ.
ÐпеÑаÑÐ¾Ñ ÑнаÑний плÑÑ +value Ñ Ð´Ð¾Ð±Ñе вÑдомим ÑпоÑобом пеÑеÑвоÑÐµÐ½Ð½Ñ value Ñ ÑиÑло.
Щоб ÑникнÑÑи плÑÑанини, вÑн не пÑдÑÑимÑÑÑÑÑÑ Ð½Ð° Ð²ÐµÐ»Ð¸ÐºÐ¸Ñ ÑиÑÐ»Ð°Ñ :
let bigint = 1n;
alert( +bigint ); // помилка
Ð¢Ð¾Ð¼Ñ Ð¼Ð¸ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи Number(), Ñоб пеÑеÑвоÑиÑи велике ÑиÑло в ÑиÑло.
ÐоÑÑвнÑннÑ
ÐоÑÑвнÑннÑ, ÑÐ°ÐºÑ Ñк <, >, ÑÑдово пÑаÑÑÑÑÑ Ð· великими Ñа ÑиÑлами:
alert( 2n > 1n ); // true
alert( 2n > 1 ); // true
ÐвеÑнÑÑÑ ÑвагÑ, оÑкÑлÑки ÑиÑла Ñа Ð²ÐµÐ»Ð¸ÐºÑ ÑиÑла маÑÑÑ ÑÑÐ·Ð½Ñ Ñипи, вони можÑÑÑ Ð±ÑÑи ÑÑвними ==, але не ÑÑÑого ÑÑвними ===:
alert( 1 == 1n ); // true
alert( 1 === 1n ); // false
ÐÑÐ»ÐµÐ²Ñ Ð¾Ð¿ÐµÑаÑÑÑ
ÐÑеÑÐµÐ´Ð¸Ð½Ñ if або ÑнÑиÑ
логÑÑниÑ
опеÑаÑÑй Ð²ÐµÐ»Ð¸ÐºÑ ÑиÑла поводÑÑÑÑÑ Ñк ÑиÑла.
ÐапÑиклад, Ñ if велиÑе ÑиÑло 0n Ñ Ñ
ибним, ÑнÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ñ ÑÑÑинними:
if (0n) {
// нÑколи не виконаÑÑÑÑÑ
}
ÐогÑÑÐ½Ñ Ð¾Ð¿ÐµÑаÑоÑи, ÑÐ°ÐºÑ Ñк ||, && Ñа ÑнÑÑ Ñакож пÑаÑÑÑÑÑ Ð· великими ÑиÑлами, подÑбно до ÑиÑел:
alert( 1n || 2 ); // 1 (1n вважаÑÑÑÑÑ ÑÑÑинним)
alert( 0n || 2 ); // 2 (0n вважаÑÑÑÑÑ Ñ
ибним)
ÐолÑÑÑли
ÐолÑÑÑÐ»ÐµÐ½Ð½Ñ Ð²ÐµÐ»Ð¸ÐºÐ¸Ñ
ÑиÑел Ñ Ñкладним. ÐÑиÑина в ÑомÑ, Ñо багаÑо опеÑаÑоÑÑв в JavaScript, ÑакиÑ
Ñк +, - ÑоÑо, поводÑÑÑÑÑ Ð¿Ð¾-ÑÑÐ·Ð½Ð¾Ð¼Ñ Ð· великими ÑиÑлами поÑÑвнÑно Ð·Ñ Ð·Ð²Ð¸Ñайними ÑиÑлами.
ÐапÑиклад, подÑл Ð²ÐµÐ»Ð¸ÐºÐ¸Ñ ÑиÑел завжди повеÑÑÐ°Ñ Ð²ÐµÐ»Ð¸ÐºÐµ ÑиÑло (за поÑÑеби окÑÑглÑÑÑÑÑÑ).
Щоб емÑлÑваÑи ÑÐ°ÐºÑ Ð¿Ð¾Ð²ÐµÐ´ÑнкÑ, полÑÑÑл Ð¼Ð°Ñ Ð¿ÑоаналÑзÑваÑи код Ñ Ð·Ð°Ð¼ÑниÑи вÑÑ ÑÐ°ÐºÑ Ð¾Ð¿ÐµÑаÑоÑи ÑвоÑми ÑÑнкÑÑÑми. Ðле Ñе гÑомÑздко Ñ Ð±Ñде коÑÑÑваÑи Ð²ÐµÐ»Ð¸ÐºÐ¾Ñ Ð¶ÐµÑÑви в пÑодÑкÑивноÑÑÑ.
ÐÑже, добÑе вÑдомого Ñ Ð¾ÑоÑого полÑÑÑÐ»Ñ Ð½Ðµ ÑÑнÑÑ.
ÐÑоÑе, ÑозÑобники бÑблÑоÑеки JSBI пÑопонÑÑÑÑ ÑÑÑеннÑ.
Ð¦Ñ Ð±ÑблÑоÑека ÑеалÑзÑÑ Ð¿ÑдÑÑÐ¸Ð¼ÐºÑ Ð²ÐµÐ»Ð¸ÐºÐ¸Ñ ÑиÑел, викоÑиÑÑовÑÑÑи влаÑÐ½Ñ Ð¼ÐµÑоди. Ðи можемо викоÑиÑÑовÑваÑи ÑÑ Ð·Ð°Ð¼ÑÑÑÑ Ð½Ð°ÑÐ¸Ð²Ð½Ð¸Ñ Ð²ÐµÐ»Ð¸ÐºÐ¸Ñ ÑиÑел:
| ÐпеÑаÑÑÑ | наÑивний BigInt |
JSBI |
|---|---|---|
| СÑвоÑÐµÐ½Ð½Ñ from Number | a = BigInt(789) |
a = JSBI.BigInt(789) |
| ÐÐ¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ | c = a + b |
c = JSBI.add(a, b) |
| ÐÑднÑÐ¼Ð°Ð½Ð½Ñ | c = a - b |
c = JSBI.subtract(a, b) |
| ⦠| ⦠| ⦠|
â¦Ð поÑÑм ÑкоÑиÑÑайÑеÑÑ Ð¿Ð¾Ð»ÑÑÑлом (плагÑн Ð´Ð»Ñ Babel), Ñоб пеÑеÑвоÑиÑи виклики JSBI на наÑÐ¸Ð²Ð½Ñ Ð²ÐµÐ»Ð¸ÐºÑ ÑиÑла Ð´Ð»Ñ ÑÐ¸Ñ Ð±ÑаÑзеÑÑв, ÑÐºÑ ÑÑ Ð¿ÑдÑÑимÑÑÑÑ.
ÐнÑими Ñловами, Ñей пÑÐ´Ñ Ñд пÑипÑÑкаÑ, Ñо ми пиÑемо код на JSBI замÑÑÑÑ Ð½Ð°ÑÐ¸Ð²Ð½Ð¸Ñ Ð²ÐµÐ»Ð¸ÐºÐ¸Ñ ÑиÑел. Ðле JSBI вÑеÑÐµÐ´Ð¸Ð½Ñ Ð¿ÑаÑÑÑ Ð· ÑиÑлами Ñк Ñз великими ÑиÑлами, емÑлÑÑ ÑÑ Ð²ÑдповÑдно до ÑпеÑиÑÑкаÑÑÑ, Ñож код бÑде «гоÑовий до Ð²ÐµÐ»Ð¸ÐºÐ¸Ñ ÑиÑел».
Ðи можемо викоÑиÑÑовÑваÑи Ñакий код JSBI «Ñк Ñ» Ð´Ð»Ñ Ð´Ð²Ð¸Ð³ÑнÑÑв, ÑÐºÑ Ð½Ðµ пÑдÑÑимÑÑÑÑ Ð²ÐµÐ»Ð¸ÐºÑ ÑиÑла, а Ð´Ð»Ñ ÑÐ¸Ñ , ÑÐºÑ Ð¿ÑдÑÑимÑÑÑÑ â полÑÑÑл конвеÑÑÑваÑиме виклики в наÑÐ¸Ð²Ð½Ñ Ð²ÐµÐ»Ð¸ÐºÑ ÑиÑла.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)