tgoop.com/linuxpeople_feed/2225
Last Update:
💣 #LoSapeviChe
0,1 + 0,2 NON FA 0,3 😱 ??
Non per i nostri PC almeno 😂
I calcolatori non comprendono nativamente il concetto di "numeri con virgola", di conseguenza si è dovuto pensare ad un metodo per rappresentarli-
Il metodo che è stato studiato si chiama IEEE 754, del quale vi lascio la pagina wikipedia qui.
In poche parole: il numero è rappresentato in memoria come la successione di 3 numeri interi:
- il segno (che può essere 1 o 0)
- l'esponente, che nella variante 32 bit ha 8 bit dedicati (valori da 0 fino a 255 o da -127 a 127)
- la mantissa, che nella variante 32 bit ha 23 bit dedicati, da decifrare in base ad altri parametri.
Normalmente il calcolo si effettua così :(-1)ˢ × 2ᵉ × M
Dove la s
vale 0 o 1 in base al segno, la e
rappresenta l'esponente mentre la M
la mantissa, il quale primo bit in genere si ignora (è chiamato anche hidden bit).
Tuttavia esistono una serie di casi limite in cui il calcolo si effettua in maniere diverse, ad esempio con esponente che vale 255
e per qualunque valore non nullo della mantissa si ha un "NaN" (not a number). Ma non farò qui una lezione sui numeri in virgola mobile 😂.
Quello che è più interessante, dopo questa piccola panoramica, è che con questi sistema purtroppo non si possono rappresentare tutti i numeri con la virgola, né tutte le operazioni.
Il caso più celebre è quello di 0.1
+ 0.2
che non risulta 0.3
, ma 0.30000000000000004
! In verità non è nemmeno esatto, infatti continuando a calcolare altre cifre si scoprirebbe che dopo quel 4 ci son altre cifre, ma non è tanto questo il punto.
Il punto è che spesso si da la colpa a linguaggi o framework per quella che semplicemente è l'ignoranza di aspetti teorici e limiti del linguaggio e della rappresentazione. Questo purtroppo è il vero motivo per cui tutti possono essere programmatori oggi e scrivere codici su codici seguendo semplicemente una banale documentazione. Ma non tutti possono costruire un prodotto informatico che sia mediamente affidabile e duraturo nel tempo-
Per saperne di più su come gestiscono i floating point i vari linguaggi, esiste un bellissimo sito che raccoglie una serie di esempi:
https://0.30000000000000004.com
Ci si può trovare per alcuni anche come gestire i calcoli in tutta sicurezza.
BY feed linuxpeople
Share with your friend now:
tgoop.com/linuxpeople_feed/2225