Se è possibile memorizzare BigInts in un modo più ottimale di un array

2

Questo suggerisce semplicemente di memorizzare BigInts come array:

// n = -123
var n = {
    sign: -1,
    digits: [3, 2, 1]
};

Tuttavia, se hai "big ints", quella matrice diventerà grande:

var n = {
    sign: -1,
    digits: [ 1, 2, 3, ..., n_100 ]
};

Un array di cento cifre, che sarebbe piuttosto lento se ce ne fosse molto.

Forse c'è un modo per combinare i numeri in un altro modo, quindi ogni numero nell'array va fino a quando non raggiunge il limite massimo a 32 o 64 bit. In questo modo puoi comprimere saldamente.

Ti stai chiedendo se c'è un modo per farlo. Sembra che sia ciò che viene fatto qui :

{
  type: 'BigInt',
  sign: 0,
  num_digits: 3,
  digits: [0x12…, 0x34…, 0x56…],
}
    
posta Lance Pollard 24.08.2018 - 22:46
fonte

1 risposta

3

I bignum vengono solitamente memorizzati come una serie di cifre. Proprio come i piccoli sono.

I Smallnum vengono solitamente memorizzati come array di lunghezza fissa di "cifre" nella base 2 . I Bignum sono solitamente memorizzati come array di lunghezza variabile di "cifre" nella base 18446744073709551616 .

L'aritmetica è esattamente nello stesso modo in cui hai imparato a scuola.

    
risposta data 24.08.2018 - 23:13
fonte

Leggi altre domande sui tag