DAVID MALAN: Låt oss nu blåsa dig. Det visar sig i den verkliga världen 1 delat genom 10 är verkligen 1/10 eller 0,1. Men i datorer som endast har en begränsad antalet bitar med vilka till representera siffror, kan du inte alltid representera tal som 1/10 med perfekt precision. Med andra ord, datorer har ibland för att göra dom samtal och inte nödvändigtvis det nummer du vill så exakt som du tänker. Anta att jag går tillbaka till detta program och ändra 0,1 till, oh, 0,28, vilket visar att Jag skulle vilja printf att printf till 28 platser för precision. Låt oss nu spara och kompilera programmet, denna gång med make floats2. Kör det med punkt snedstreck floats2. Och, käre Gud, den här gången ser jag inte 0.1, men 0.10000000, vilket är ganska bra så här långt. Men sedan, 14901161193847656250. Tja, vad som händer? Jo, det visar sig att en flottör är vanligtvis lagras inuti en dator med 32 bitar. 32 är uppenbarligen ett begränsat antal, vilket innebär att du bara kan representera med 32 bitar ett ändligt antal av flyttalsvärden. Tyvärr innebär det att Datorn kan inte representera alla möjliga flyttal, eller reella tal, som finns i hela världen, eftersom den bara har så många bitar. Och så vad datorn är tydligen gjort i detta fall utgör 1/10 till närmast möjliga flytande poängvärde att det kan. Men om vi ser, som vi har här, till 28 decimaler, börjar vi se att inexakthet. Så detta är ett problem med ingen perfekt lösning. Vi kan använda en dubbel i stället för en flottör, som tenderar att använda 64 bitar som motsatt till 32. Men naturligtvis, är 64 också ändlig, så att problemet kommer att kvarstå även med dubbel.