Questa risposta si basa sulla risposta di Ralf Kleberhoff e cerca di indirizzare specificamente C.
Per prima cosa, leggi su aritmetica arbitraria di precisione su Wikipedia. Per dirla semplicemente, è possibile:
- Per una libreria software riutilizzabile per fornire bignums di dimensioni fisse, come numeri interi a 64 bit, numeri interi a 128 bit, numeri interi a 256 bit, ecc. e bignari di dimensioni arbitrarie, dove la quantità di memoria necessaria per memorizzare il valore è allocata dinamicamente in base a quanto è grande il valore, dal risultato del calcolo o dalla copia.
- Per un linguaggio di programmazione fornire lo stesso e integrato nella sintassi del linguaggio stesso - in modo che anche gli operatori "+" "-" "*" "/" funzionino con bignums, ad esempio.
- Per un linguaggio di programmazione specificare una "libreria standard" standardizzata e fornita con la lingua. Questa libreria standard è talvolta chiamata "la libreria di runtime" del linguaggio di programmazione.
Per alcuni linguaggi di programmazione moderni, la scelta tipica è la terza: includere tali strutture bignum come una libreria standard fornita con la lingua.
Alcuni altri linguaggi di programmazione (non così moderni, ma molto avanzati e in anticipo sui tempi) hanno già implementato la seconda scelta - al fine di eliminare "overflow di interi" come fonte di "imprevisto" (errori o eccezioni) nella programmazione.
Tuttavia, per C, due mentalità funzionano contro la seconda e la terza scelta:
- Il linguaggio C cerca di mantenere la lingua stessa al minimo.
- Anche il linguaggio C cerca di mantenere la libreria standard al minimo.
Quindi, il comitato che controlla C rifiuta di rettificare (standardizzare) una libreria bignum per il linguaggio di programmazione C. Gli utenti di C devono quindi cercare una libreria bignum, oppure implementarne una propria.
Il linguaggio C lascia fuori molte cose. Ad esempio, la maggior parte dei linguaggi di programmazione ha un'implementazione del checksum "Deflate" (compressione / decompressione) o "MD5" nelle loro librerie standard. C non.
Perché esiste una distinzione tra "bignums a dimensione fissa" e "bignum di dimensioni dinamiche"?
Questo perché bignums a dimensione fissa (dove la dimensione è determinata dal programmatore e scritta nel codice sorgente) consente di determinare la dimensione della memoria in fase di compilazione. Il codice macchina compilato è sia più semplice che più veloce - richiede meno istruzioni per eseguire ogni operazione. I bignum di dimensioni dinamiche richiedono più istruzioni della macchina per ogni operazione.