Al fine di comprendere la necessità di scrivere i nostri algoritmi statistici in una certa maniera, ad esempio calcolare la media attraverso l'algoritmo di Knuth. Ma anche solo per evitare dei facili errori. Vediamo la rappresentazione dei numeri all'interno del computer.
rappresentazione dei numeri interi
Vediamo come vengono immagazzinati i numeri all'interno della sequenza di bit. Nella notazione accezione comune, rappresentiamo i numeri attraverso il sistema decimale, cioè in termine di base 10. Quando utilizziamo una notazione posizionale di questo tipo stiamo automaticamente associando a ciascuna posizione una potenza di 10 nel sistema decimale.
Siccome nel computer le unità elementari di memoria possono prendere soltanto due cifre(sistema binario), cioè valori 0 e 1. Nel sistema decimale abbiamo a disposizione 10 cifre da 0 a 9. Però per il resto possiamo operare nella stessa maniera, cioè assegniamo un diverso peso alle cifre dalla più significativa alla meno significativa. Avremo non più potenze di 10 ma potenze di 2.
A seconda del tipo di variabile che utilizzo avrò un determinato numero di bit. Il bit servono a rappresentare il segno e il valore del numero. Questo numero di bit potrà rappresentare solamente un numero finito di interi. Ed è qui che possono crearsi dei problemi. Se andiamo al di fuori della possibilità di memorizzazione, incorriamo in un errore di over floar → siamo andati oltre la capacità di rappresentazione. Ci sono dei tipi che evitano di memorizzare il segno. Cioè sono valore che si assumono sempre positivi, i cosidetti unsigned integer dove il minimo sarebbe lo 0, il max sarà leggermente di più in quanto abbiamo un bit in più a disposizione. In c# se andiamo in over floar non ci avverte di default. In vb invece ci avverte immediatamente di default. Ricapitolando nel computer abbiamo una rappresentazione tramite bit quindi gli interi che possiamo rappresentare sono necessariamente in un range che può andare da un minimo ad un massimo. Nel caso degli interi senza segno, questo minimo è zero, ma in generale contiene valori interi stanno in un range con segno a 32 bit in un intervallo compreso tra -2.147.483.648 e 2.147.483.647.
Rappresentazione dei numeri con la virgola
Anche in questo caso, nella accezione comune si utilizza il sistema decimale. Utilizziamo come per i numeri interi una notazione posizionale che automaticamente associa a ciascuna posizione una potenza di 10 nel sistema decimale.
Nel sistema binario abbiamo invece la seguente rappresentazione con potenze di 2. Nei floating point, abbiamo oltre al problema dell'over flow, abbiamo il problema dell'under flow. Cioè quando il numero in valore assoluto è talmente piccolo che non è più rappresentabile dalla sequenza di bit. In quanto l'esponenziale negativo non entra più nello spazio riservato all'esponente ed andiamo a finire in un campo non più rappresentabile ed il numero diventa zero. Questo significa che c'e' un gap. Non possiamo avvicinarci quanto vogliamo a zero. Ci sarà un certo numero che è il più piccolo possibile rappresentabile e dopo di quello mi da zero.
Più bit ha il mio tipo e più possibilità ho di rappresentare i numeri. Il range dei tipi single/float è:
Min valore Single -3,402823E+38Max valore Single 3,402823E+38
Il range dei tipi double/float è:
Min valore Double -1,79769313486232E+308Max valore Double 1,79769313486232E+308
Nessun commento:
Posta un commento