Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ecmascript BigInt

Ecmascript BigInt

Ecmascript で導入されそうなBigInt型についてです。

Transcript

  1. Ecmascript BigInt

  2. せ⵸: @brn (ꫬꅿ⨳ⵃa.k.a ـٕ٦ظ) 耵噟: ؿٗٝزؒٝسؒٝآص،٥iOSؒٝآص، ⠓爡: Cyberagent ،سذؙأةآؔRightSegment٥AI Messenger

    ـؚٗ: http://abcdef.gets.b6n.ch/ Twitter: https://twitter.com/brn227 GitHub: https://github.com/brn
  3. Integer or Number… JavascriptךNumber㘗כ⦓侧䏝㼭侧挿㘗կ ׉׃גծ׉ך剑㣐⦼כ53Bitⴓ2 ^ 53 – 1կ ׁ׵חؽحز怴皾׾遤ֲ㜥さכ32Bit侭侧ח㢌䳔ׁ׸׷׋׭ծ

    2 ^ 32הז׷կ
  4. Double Precision Floating Point ⦓礵䏝嵤⹛㼭侧挿侧(DPFP)כ㼰侧׾12345 ה 10 ^ xחⴓֽג罋ִ׷ 邌植倯岀կ

    DPFPכIEEE 754ח״׏ג⟃♴ך״ֲח㹀纏ׁ׸גְ׷կ 52 11 1 ˟⽃⡘כׅץגؽحز 䊩ַ׵ծ痗〾ؽحز٥䭷侧鿇٥⟎侧鿇הְֲせ⵸חז׏גְ׷կ
  5. Double Precision Floating Point A. 痗〾ؽحزהכ1bit׾⢪׏ג⦼ָ +ַ-׾邌植ׅ׷կ B. 䭷侧鿇הכ11ؽحز׾⢪׏ג10ך⛦ 皾׾邌植ׅ׷կ

    C. ⟎侧鿇כ53ؽحزך侭侧⦼׾邌植 ׅ׷կ ׅ׷ה⟃♴ך״ֲח㼰侧׾邌植ׅ׷ֿ הָדֹ׷կ (A? +1 : -1) * (C * (10 ^ B))
  6. MAX_SAFE_INTEGER Ecmascriptחכֿך⦓礵䏝嵤⹛㼭侧挿侧ך眔㔲ד㸜Ⰻח鎘皾דֹ׷ ⦼ךMax⦼׾㹀׭גֶ׶ծ Number.MAX_SAFE_INTEGERה׃ג،ؙإأׅ׷ֿהָ〳腉կ ׉׃ג׉ך⦼כ⵸鶢ך(2 ^ 53 – 1)הז׷կ ז׈ז׵IEEE

    754ךDPFPדכ⟎侧鿇ָ52ؽحز׃ַזְַ׵կ
  7. Limitation ׃ַ׃ծMAX_SAFE_INTEGER׾馄ִ׷侧⦼ד怴皾׾׃׋ְ㜥さכ וֲׅ׷ךַ npmٌآُ٦ٕ׾⢪ֲ •  substack/node-bitint •  peterolson/BigInteger.js

  8. var bigint = require('bigint');! ! var b = bigint('782910138827292261791972728324982')! .sub('182373273283402171237474774728373')!

    .div(8);! ! console.log(b);!
  9. Operator Problem 铣׫חְֻ… ׉׮׉׮JSכぐ珏怴皾㶨׾ؔ٦غ٦ٗ٦سדֹזְךדծ 杝荈侧⦼ؙٓأחכַז׶搀椚ָ֮׷կ

  10. Ecmascript BigInt ׉ֿדtc39 proposalחEcmascript BigIntָ䲿周ׁ׸׋կ 植㖈stage3זךד׮ֲ㼰׃ד䱰欽׏גٓ؎ٝկ

  11. BigInt Overview BigIntכSignedהUnsignedך64bit侭 侧⦼ד邌植ׁ׸׷կ 侧⦼ٔذٕٓך䖓׹חn ׾אֽ׷ֿה דBigIntٔذٕٓ׾邌植ׅ׷կ HexװOctalٔذٕٓ׮؟ه٦زկ侧⦼ ٔذٕٓהずֻׄn׾劣㽵חאֽ׷ֿ הדBigIntחז׷կ(׋׌׃ծOctalכ

    0oXXX䕎䒭ך׫) ת׋ծtypeof <bigint>כ 'bigint'ָ䨱׷կ
  12. function nthPrime(nth) {! function isPrime(p) {! for (let i =

    2n; i < p; i++) {! if (p % i === 0n) return false;! }! return true;! }! for (let i = 2n; ; i++) {! if (isPrime(i)) {! if (--nth === 0n) return i;! }! }! }!
  13. BigInt Operators 怴皾㶨כغ؎شٔؔلٖ٦ة٦ + - * ** / % הծ

    ぐ珏ؽحز怴皾| & << >> ^ הծ 嫰鯰怴皾㶨 == === < > >= <= ׾؟ه٦زկ ׋׌׃ծ0㙵׭怴皾㶨 >>> כ؟ه٦ ز׃זְկ
  14. BigInt Objects Number㘗ך״ֲחٓحػ٦ؔـآؙؑزךBigIntؔـآؙؑز׮欽 䠐ׁ׸׷կ 䔲搫Constructor׮欽䠐ׁ׸׷կ ConstructorכNumberך״ֲח俑㶵⴨װ׉ך➭ך㘗׾BigIntח㢌䳔 ׅ׷կ

  15. new BigInt('34034')! // BigInt {[[PrimitiveValue]]: 34034n}! // new でオブジェクトを生成 !

    BigInt('34034')! // 34034n! // 関数呼び出しで変換 ! BigInt.asUintN(width, BigInt)! // 引数BigIntを 0 から 2 ^ widthのサイズのBigIntに変 換する。 ! BigInt.asIntN(width, BigInt)! // 引数BigIntを -2 ^ width から 2 ^ (width - 1) - 1のサイズのBitInt型に変換する。 ! BigInt.parseInt(string[, radix])! // 文字列をradixを基数とするBigInt型に変換する。
  16. BigInt Limitation Number㘗הך幉さכ鏩〳ׁ׸זְկ את׶ծぐ珏怴皾㶨כBigIntず㡦ד׃ ַ㹋遤דֹזְկ JSךDPFPהך怴皾ך穠卓ָIntegerח ז׵זְךדBigIntך⥂鏾㢩חז׏ג ׃תֲկ את׶农럀ך㢌䳔כ♧ⴖ遤׻׸זְկ ׋׌׃ծ嫰鯰怴皾ך׫幉さׅ׷ֿהָ

    鏩〳ׁ׸גְ׷կ
  17. TypedArray ׁ׵חTypedArrayח׮ BigInt64ArrayהBigUint64Array㘗ָ鷄⸇ׁ ׸׷կ ׉׸׊׸Int64הUint64㘗ד侧⦼׾⥂䭯ׅ׷կ

  18. DataView DataViewח׮ get/set BigInt64 ًاحسָ鷄⸇ׁ׸גծ⦼׾BitInt㘗ה׃ג《׶⳿ׇ׷״ֲחז׷կ

  19. תה׭ װ׏הjavascriptח׮64bit侭侧ֹתׅיկ ׀幠耮֮׶ָהֲ׀ְׂת׃׋