Base (aritmetica)
In matematica, la base di un sistema di numerazione posizionale è il numero di cifre distinte, inclusa quella per lo 0, che il sistema usa per rappresentare i numeri. La rappresentazione in base 10 è l'ordinaria scrittura dei numeri a cui siamo abituati.
Definizione
modificaUn numero naturale n viene rappresentato in base b associando una sequenza finita di numeri naturali ciascuno scelto tra 0 e b-1 in modo tale che valga l'uguaglianza:
Si può dimostrare che questa associazione definisce una corrispondenza biunivoca tra l'insieme dei numeri naturali e l'insieme delle sequenza finite composte da numeri scelti tra 0 e b-1.
Per segnalare che un numero è rappresentato in una certa base, la si può indicare al suo pedice, ad esempio: 1101012=5310. Visto che in una base b, il numero b è sempre scritto come 10 (dato che b=1·b1+0·b0), nella rappresentazione della base numerica potrebbe essere consigliabile l'uso di "9+1" o "A" al posto di un autoreferenziale "10", il cui contenuto, visto il contesto, potrebbe risultare non univoco e quindi paradossale.
In una data base b, i numeri razionali rappresentabili con un numero finito di cifre dopo la virgola sono tutti e soli quelli che, espressi sotto forma di frazione irriducibile m/n, non hanno fattori primi di n che non siano anche fattori primi di b. Ad esempio, i fattori primi di 10 sono 2 e 5, per cui le frazioni che generano numeri periodici in base 10 sono quelle che (ridotte in forma normale) al denominatore hanno fattori primi diversi da 2 e da 5. I numeri irrazionali non sono esprimibili con un numero finito di cifre in nessuna base.
Simboli di cifra
modificaPer basi minori o uguali a 10, generalmente si usano le comuni cifre 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9.
Per basi maggiori di 10, è necessario introdurre altri simboli, di solito lettere. Nel sistema esadecimale sono usate le cifre 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E ed F. Così, ad esempio, F3A0 in base 16 equivale a 62368 in base 10. Un sistema di numerazione di base 2B o 2B+1 può anche usare B cifre, di cui alcune segnate e che valgono come negative, ovvero N, ..., 2, 1, 0, 1, 2, ..., N. In questo caso si parla di sistema bilanciato; si veda ad esempio il sistema ternario bilanciato.
Esempi di conversione di base
modificaDa base diversa da 10 alla base 10
modificaPer scrivere un numero in base diversa da 10 in un numero in base 10 si deve in primo luogo scriverlo sotto forma polinomiale. Riportiamo un esempio che risulta di più facile comprensione rispetto a una spiegazione astratta del caso generale.
Per trasformare, ad esempio, il numero (1010)2 dalla base 2 alla base 10:
- scriviamo il numero sotto forma polinomiale: 1×23+0×22+1×2+0×20;
- eseguiamo le operazioni indicate: 8+2+0;
- otteniamo 10 in base 10. quindi (1010)2=(10)10.
Dalla base 10 a una base diversa da 10
modificaPer trasformare un numero in base 10 nella corrispondente scrittura in una base diversa da 10 operiamo con divisioni successive e in particolare dobbiamo tenere in considerazione di quozienti (q) e resti (r) di ogni divisione. Anche in questo caso riportiamo un esempio.
Vogliamo trasformare il numero 428, appartenente al sistema decimale, nel numero corrispondente nella base 6:
- dividiamo 428 per 6: otteniamo q=71, r=2;
- dividiamo il quoziente 71 per 6: otteniamo q1=11, r1=5;
- dividiamo il quoziente 11 per 6: otteniamo q2=1, r2=5;
- dividiamo il quoziente 1 per 6: otteniamo q3=0, r3=1.
Il procedimento è terminato, perché q=0. Scrivendo i resti ottenuti a partire dall'ultimo fino al primo otteniamo il numero (1552)6 che è il numero cercato.
Implementazione dell'algoritmo
modificaSegue un'implementazione dell'algoritmo per la conversione di base di un numero.
// Converti il valore 'from_value', scritto in base 'from_base', in base 'to_base', e salva il risultato in 'to_value'
bool tobase(char *from_value, char *to_value, int from_base, int to_base)
{
double value = 0;
int value_size;
for (value_size = 0; from_value[value_size] != '\0'; ++value_size);
for (int pos = 0, exp = value_size-1; exp >= 0; ++pos, --exp)
{
if (!(from_value[pos]-'0')) continue;
if (from_value[pos] >= '0' && from_value[pos] <= from_base-1+'0') value += pow(from_base, exp)*(from_value[pos]-'0');
else if (from_value[pos] >= 'A' && from_value[pos] <= from_base-11+'A') value += pow(from_base, exp)*(from_value[pos]-'A'+10);
else if (from_value[pos] >= 'a' && from_value[pos] <= from_base-11+'a') value += pow(from_base, exp)*(from_value[pos]-'a'+10);
else return false; // Errore durante la conversione
}
int digits = 0;
for (int i = 0; i < MAX_LENGTH; ++i) to_value[i] = '0';
while (value > 0)
{
int fact = value, exp;
for (exp = 0; fact/to_base>0; ++exp)
fact/=to_base;
if (!digits) digits = exp;
value -= pow(to_base, exp)*fact;
if (fact > 9) to_value[digits-exp] = 'A' + fact-10;
else to_value[digits-exp] = '0' + fact;
}
to_value[digits+1] = '\0';
return true; // Conversione riuscita
}
Generalizzazioni del concetto di base
modificaLe basi comunemente usate sono tutte numeri naturali, ma si possono costruire anche sistemi di numerazione basati su basi negative, non intere (come la base aurea) e complesse.
Voci correlate
modificaCollegamenti esterni
modifica- (EN) Eric W. Weisstein, Base, su MathWorld, Wolfram Research.
- Convertitore tra basi, su tinytools.nu. URL consultato il 17 aprile 2012 (archiviato dall'url originale il 26 aprile 2012).