giovedì 2 aprile 2020

Rappresentazione dei numeri nel computer: tipi interi e floating point

Premessa

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. 


Il valore dei  numeri con la virgola  li troviamo nell'asse reale, ma è possibile rappresentarli solo attraverso un numero finito di valori. E tra il minimo e il massimo sulla retta reale abbiamo una infinità continua di valori, possiamo rappresentare solo alcuni valori della retta reale, quei valori che possono essere rappresentati su potenze di due attraverso un sistema binario. Il sistema decimale è utilizzato negli articoli scientifici, definiti nella seguente formula:



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+38
Max 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

applicazione13

- Svolgere l' Esercizio 4  indicato nel video 49 (processo aleatorio + ordini e calcolo PNL) - Completare l' Esercizio 4  aggiungen...