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.