>> 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.