Slide 1

Slide 1 text

Ecmascript BigInt

Slide 2

Slide 2 text

せ⵸: @brn (ꫬꅿ⨳ⵃa.k.a ـٕ٦ظ) 耵噟: ؿٗٝزؒٝسؒٝآص،٥iOSؒٝآص، ⠓爡: Cyberagent ،سذؙأةآؔRightSegment٥AI Messenger ـؚٗ: http://abcdef.gets.b6n.ch/ Twitter: https://twitter.com/brn227 GitHub: https://github.com/brn

Slide 3

Slide 3 text

Integer or Number… JavascriptךNumber㘗כ⦓侧䏝㼭侧挿㘗կ ׉׃גծ׉ך剑㣐⦼כ53Bitⴓ2 ^ 53 – 1կ ׁ׵חؽحز怴皾׾遤ֲ㜥さכ32Bit侭侧ח㢌䳔ׁ׸׷׋׭ծ 2 ^ 32הז׷կ

Slide 4

Slide 4 text

Double Precision Floating Point ⦓礵䏝嵤⹛㼭侧挿侧(DPFP)כ㼰侧׾12345 ה 10 ^ xחⴓֽג罋ִ׷ 邌植倯岀կ DPFPכIEEE 754ח״׏ג⟃♴ך״ֲח㹀纏ׁ׸גְ׷կ 52 11 1 ˟⽃⡘כׅץגؽحز 䊩ַ׵ծ痗〾ؽحز٥䭷侧鿇٥⟎侧鿇הְֲせ⵸חז׏גְ׷կ

Slide 5

Slide 5 text

Double Precision Floating Point A. 痗〾ؽحزהכ1bit׾⢪׏ג⦼ָ +ַ-׾邌植ׅ׷կ B. 䭷侧鿇הכ11ؽحز׾⢪׏ג10ך⛦ 皾׾邌植ׅ׷կ C. ⟎侧鿇כ53ؽحزך侭侧⦼׾邌植 ׅ׷կ ׅ׷ה⟃♴ך״ֲח㼰侧׾邌植ׅ׷ֿ הָדֹ׷կ (A? +1 : -1) * (C * (10 ^ B))

Slide 6

Slide 6 text

MAX_SAFE_INTEGER Ecmascriptחכֿך⦓礵䏝嵤⹛㼭侧挿侧ך眔㔲ד㸜Ⰻח鎘皾דֹ׷ ⦼ךMax⦼׾㹀׭גֶ׶ծ Number.MAX_SAFE_INTEGERה׃ג،ؙإأׅ׷ֿהָ〳腉կ ׉׃ג׉ך⦼כ⵸鶢ך(2 ^ 53 – 1)הז׷կ ז׈ז׵IEEE 754ךDPFPדכ⟎侧鿇ָ52ؽحز׃ַזְַ׵կ

Slide 7

Slide 7 text

Limitation ׃ַ׃ծMAX_SAFE_INTEGER׾馄ִ׷侧⦼ד怴皾׾׃׋ְ㜥さכ וֲׅ׷ךַ npmٌآُ٦ٕ׾⢪ֲ •  substack/node-bitint •  peterolson/BigInteger.js

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Operator Problem 铣׫חְֻ… ׉׮׉׮JSכぐ珏怴皾㶨׾ؔ٦غ٦ٗ٦سדֹזְךדծ 杝荈侧⦼ؙٓأחכַז׶搀椚ָ֮׷կ

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

BigInt Overview BigIntכSignedהUnsignedך64bit侭 侧⦼ד邌植ׁ׸׷կ 侧⦼ٔذٕٓך䖓׹חn ׾אֽ׷ֿה דBigIntٔذٕٓ׾邌植ׅ׷կ HexװOctalٔذٕٓ׮؟ه٦زկ侧⦼ ٔذٕٓהずֻׄn׾劣㽵חאֽ׷ֿ הדBigIntחז׷կ(׋׌׃ծOctalכ 0oXXX䕎䒭ך׫) ת׋ծtypeof כ 'bigint'ָ䨱׷կ

Slide 12

Slide 12 text

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;! }! }! }!

Slide 13

Slide 13 text

BigInt Operators 怴皾㶨כغ؎شٔؔلٖ٦ة٦ + - * ** / % הծ ぐ珏ؽحز怴皾| & << >> ^ הծ 嫰鯰怴皾㶨 == === < > >= <= ׾؟ه٦زկ ׋׌׃ծ0㙵׭怴皾㶨 >>> כ؟ه٦ ز׃זְկ

Slide 14

Slide 14 text

BigInt Objects Number㘗ך״ֲחٓحػ٦ؔـآؙؑزךBigIntؔـآؙؑز׮欽 䠐ׁ׸׷կ 䔲搫Constructor׮欽䠐ׁ׸׷կ ConstructorכNumberך״ֲח俑㶵⴨װ׉ך➭ך㘗׾BigIntח㢌䳔 ׅ׷կ

Slide 15

Slide 15 text

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型に変換する。

Slide 16

Slide 16 text

BigInt Limitation Number㘗הך幉さכ鏩〳ׁ׸זְկ את׶ծぐ珏怴皾㶨כBigIntず㡦ד׃ ַ㹋遤דֹזְկ JSךDPFPהך怴皾ך穠卓ָIntegerח ז׵זְךדBigIntך⥂鏾㢩חז׏ג ׃תֲկ את׶农럀ך㢌䳔כ♧ⴖ遤׻׸זְկ ׋׌׃ծ嫰鯰怴皾ך׫幉さׅ׷ֿהָ 鏩〳ׁ׸גְ׷կ

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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