Calcolatrice esatta per interi molto grandi — somme, sottrazioni, prodotti, divisioni e potenze senza limiti di cifre

Strumento gratuito che calcola senza errori operazioni fra interi enormi. Servendosi del tipo BigInt di JavaScript, esegue con esattezza addizioni, sottrazioni, moltiplicazioni, divisioni intere con quoziente e resto ed elevamenti a potenza anche oltre 9.007.199.254.740.991, cioè due elevato alla cinquantatreesima meno uno.

Perché oltre due elevato alla cinquantatreesima compaiono errori

Le calcolatrici comuni e il tipo numerico ordinario di JavaScript non distinguono più gli interi contigui oltre due elevato alla cinquantatreesima. Con il tipo BigInt si supera questo limite e si calcola con esattezza.

Number.MAX_SAFE_INTEGER 9,007,199,254,740,991(253 − 1)
9007199254740992 + 1 Number: 9007199254740992 (errato) / BigInt: 9007199254740993 (esatto)

Consigli

  • I tipi numerici delle calcolatrici comuni e dei fogli di calcolo introducono errori oltre due elevato alla cinquantatreesima, cioè circa novecentomila miliardi, mentre questo strumento, servendosi del tipo BigInt, calcola con esattezza senza limiti di cifre.
  • Nella divisione intera si mostrano insieme il quoziente e il resto: comodo anche per verificare le operazioni modulari usate in crittografia e nel calcolo delle sintesi.
  • Un esponente troppo grande rischierebbe di bloccare il navigatore: per prudenza il limite è fissato a un milione.
  • Nei campi si possono inserire anche numeri con i separatori delle migliaia, come 1.234.567: sono rimossi automaticamente prima del calcolo e potete quindi incollare i valori così come sono.
  • Il pulsante degli esempi inserisce automaticamente un calcolo con interi enormi, oltre due elevato alla cinquantatreesima, per constatare subito la differenza rispetto a una calcolatrice comune.

Domande frequenti

Il tipo numerico ordinario di JavaScript è il numero in virgola mobile a doppia precisione della norma IEEE 754 e tratta con sicurezza gli interi fino a 9.007.199.254.740.991. Oltre quella soglia gli interi contigui non si distinguono più e i risultati contengono errori. Questo strumento aggira il limite servendosi del tipo BigInt.

No. La specifica standard di JavaScript prevede che il tipo BigInt tratti soltanto interi. Per i calcoli ordinari con i decimali usate la calcolatrice presente su questo sito.

Il resto è il valore ottenuto sottraendo ad A il prodotto fra quoziente e B, dove il quoziente è troncato verso lo zero. Per esempio, dividendo -7 per 2 il quoziente è -3 e il resto -1.

Dove la precisione di una calcolatrice comune non basta: per verificare le operazioni sulle chiavi RSA della crittografia, con interi di centinaia o migliaia di cifre, per calcolare fattoriali enormi e per controllare le operazioni su interi a precisione arbitraria nella programmazione competitiva.

Non esiste un limite dichiarato, ma valgono i vincoli di memoria e di velocità del navigatore. Fino a qualche migliaio o decina di migliaia di cifre il calcolo è istantaneo; le grandezze estreme, come gli esponenti oltre il milione, sono limitate per prudenza.
Tool-kun

A proposito — quando gli elaboratori faticavano con i numeri grandi

La rappresentazione dei numeri negli elaboratori ha a lungo sofferto di limiti. Il numero in virgola mobile a 64 bit, cioè a doppia precisione, che molti linguaggi usano di serie, tratta con sicurezza gli interi soltanto fino a 9.007.199.254.740.991, cioè due elevato alla cinquantatreesima meno uno: la mantissa conta appena cinquantatré bit e oltre quella soglia la rappresentazione introduce errori di arrotondamento. Anche la calcolatrice presente su questo sito ne è soggetta.

A risolvere il problema è l'idea degli interi a precisione arbitraria. In JavaScript, dal 2020 circa, il nuovo tipo BigInt è presente di serie in tutti i principali navigatori e permette di trattare con esattezza interi senza limiti di cifre, nei limiti della memoria disponibile. Internamente, però, gestisce le cifre come una successione di elementi: più cifre ci sono, più il calcolo rallenta.

La tecnica è indispensabile anche in crittografia. Le chiavi dell'algoritmo RSA, per esempio, usano comunemente interi da 2048 bit, cioè oltre seicento cifre decimali, e per moltiplicarli ed elevarli a potenza modulo un numero servono librerie per interi a precisione arbitraria, impiegate nei programmi crittografici di tutto il mondo.

Anche nella programmazione competitiva ricorrono problemi con fattoriali enormi — quello di cento conta centocinquantotto cifre — o con termini lontani di successioni ricorsive. Con i tipi numerici ordinari gli errori si insinuano ben presto: la padronanza degli interi a precisione arbitraria incide spesso sulla percentuale di soluzioni corrette.