>> DAVID MALAN: Passiamo ora a bocca aperta.
Si scopre nel mondo reale 1 diviso da 10 è infatti 1/10, o 0,1.
Ma in computer che hanno solo un numero finito numero di bit con cui
rappresentare i numeri, non si può sempre rappresentare i numeri come 1/10 con
precisione perfetta.
In altre parole, i computer hanno talvolta per effettuare chiamate di giudizio e non
rappresentano necessariamente il numero vogliono più precisamente si intende.
>> Ad esempio, supponiamo che io torno in questo programma e modificare il 0,1,
oh, 0.28, indicando in tal modo che Vorrei printf a printf per
28 posti di precisione.
Vediamo ora Salvare e compilare il programma, questa volta con il make floats2.
Eseguire con dot barra floats2.
E, mio ​​Dio, questa volta non vedo 0.1, ma 0.10000000, che è abbastanza
bene finora.
Ma poi, 14901161193847656250.
>> Ebbene, che cosa sta succedendo?
Beh, si scopre che un galleggiante è tipicamente memorizzato all'interno di un computer
con 32 bit.
32 è ovviamente un numero finito, che implica che si può rappresentare solo
con 32 bit di un numero finito dei valori in virgola mobile.
Purtroppo, ciò significa che il computer non può rappresentare tutti i possibili
numeri in virgola mobile, o numeri reali, che esistono nel mondo,
perché ha solo tanti bit.
>> E così ciò che il computer è apparentemente fatto in questo caso è rappresentare 1/10 a
il più vicino possibile galleggiante valore del punto che si può.
Ma se guardiamo, come abbiamo qui, a 28 decimali, si iniziano a vedere che
imprecisione.
Quindi questo è un problema nessuna soluzione perfetta.
Possiamo usare una doppia invece di un float, che tende ad usare 64 bit come
contrasto 32.
Ma, naturalmente, 64 è anche finita, quindi il problema sarà
rimangono anche con doppie.