L'aritmetica di base di un chip di computer può funzionare solo su numeri (interi o in virgola mobile) di una dimensione fissa.
Ci sono molti algoritmi che potrebbero essere estesi per lavorare su numeri di dimensioni arbitrarie (e alcuni li richiedono). Pertanto, è utile avere un modo per archiviare ed eseguire operazioni aritmetiche con numeri di dimensione arbitraria.
Per numeri interi arbitrari, l'approccio di solito è di prendere una lista di byte (che ognuno può memorizzare un valore nell'intervallo 0-255) e avere il "numero grande" finale (spesso abbreviato come bignum ), quindi sii base-256, utilizzando ognuno di questi byte come "cifre" (ducentiquinquagintiquinquesexa-its?).
Per ogni numero reale non numerato non intero, esistono due diversi modi di rappresentazione:
-
decimali , che consistono in una mantissa ed esponente di "numero grande" di dimensioni arbitrarie. Il numero è rappresentato da
sign(+1 or -1) * mantissa * pow(base, exponent)
(dovebase
è in genere2
o talvolta10
) -
rationals , che hanno un numeratore e un denominatore di una dimensione numerica arbitraria. Il numero è rappresentato da
numerator / denominator
In pratica, ho trovato molte più lingue e librerie da utilizzare / supportare tipi di dati decimali rispetto ai tipi di dati razionali. Un esempio di questo sono gli archivi di dati (SQL), che hanno un tipo di dati DECIMAL nativo ma non razionale.
Perché è così? Perché i tipi di dati decimali sono preferiti rispetto a quelli razionali?