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)

Che cosa significa il calcolo esatto con interi grandi

Una calcolatrice comune, e il tipo numerico della maggior parte dei linguaggi di programmazione – fra cui il Number di JavaScript –, non riesce a conservare esattamente interi oltre 2^53 − 1 (9.007.199.254.740.991); superata quella soglia si insinua l’errore di arrotondamento man mano che le cifre crescono. Il calcolo esatto con interi grandi consiste nel valicare quel tetto ed eseguire addizioni, sottrazioni, moltiplicazioni, divisioni ed elevamenti a potenza con un numero qualsiasi di cifre, senza errore.

Questo strumento calcola con il tipo BigInt di JavaScript, perciò non esiste un limite pratico al numero di cifre: interi di parecchie centinaia di cifre, come quelli che ricorrono in crittografia e nella programmazione competitiva, tornano esatti. La divisione fra interi mostra insieme quoziente e resto e, poiché le potenze diventano rapidamente enormi, all’esponente si applica un limite superiore di sicurezza.

Come si usa

  1. Inserisca il primo intero (A) Digiti l’intero con cui vuole operare. I separatori delle migliaia vengono rimossi automaticamente se li lascia.
  2. Scelga l’operatore Selezioni addizione, sottrazione, moltiplicazione, divisione fra interi (quoziente e resto) oppure elevamento a potenza.
  3. Inserisca il secondo intero (B) Fornisca l’altro operando. Nell’elevamento a potenza, B è l’esponente.
  4. Verifichi il risultato Risultato e numero di cifre si aggiornano in tempo reale mentre digita. Nella divisione fra interi compaiono sia il quoziente sia il resto.

Consigli per sfruttarlo al meglio

  • 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.

Quando torna utile

Verificare lavori di crittografia

Utile per studiare o controllare tecniche come la generazione di chiavi RSA, che comportano aritmetica su interi da alcune centinaia ad alcune migliaia di cifre.

Controllare risposte nella programmazione competitiva

Confermi rapidamente le risposte attese di problemi con interi a precisione arbitraria, come fattoriali grandi o termini lontani della successione di Fibonacci.

Individuare errori in grandi dati numerici

Verifichi se un risultato calcolato in un foglio elettronico o con una calcolatrice comune abbia superato 2^53 finendo nell’errore di arrotondamento, confrontandolo con il valore esatto.

Studio e ricerche di matematica

Constati di persona come crescano potenze e resti di numeri con molte cifre, partendo da valori reali anziché da descrizioni.

Termini sugli interi grandi

BigInt
Il tipo di dato di JavaScript per trattare esattamente interi di lunghezza illimitata. A differenza del consueto tipo Number, calcola senza errore anche oltre 2^53.
Intero a precisione arbitraria (bignum)
Meccanismo per rappresentare interi oltre l’intervallo che un calcolatore gestisce nativamente, senza limiti di cifre. Internamente le cifre sono gestite come un vettore e il calcolo procede su quella base.
Number.MAX_SAFE_INTEGER
Il massimo intero che il tipo Number di JavaScript conserva in modo sicuro e senza errore: 2^53 − 1, cioè 9.007.199.254.740.991. Oltre tale soglia gli interi contigui non si distinguono più.
Divisione fra interi
Divisione che non produce decimali e separa il risultato in quoziente – la parte intera – e resto. In presenza di numeri negativi il quoziente viene troncato verso lo zero.
RSA
Crittosistema a chiave pubblica che usa come chiave il prodotto di due grandi numeri primi. L’aritmetica su interi da 2048 bit, oltre 600 cifre decimali, è consueta, perciò la precisione arbitraria è indispensabile.

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.