>> DAVID MALAN: Lad os nu blæse din hjerne.
Det viser sig i den virkelige verden 1 divideret med 10 er faktisk 1/10 eller 0,1.
Men i computere, der kun har en begrænset Antallet af bits, som til
repræsentere tal, kan du ikke altid repræsentere tal som 1/10 med
perfekt præcision.
Med andre ord computere undertiden at foretage vurderinger og ikke
nødvendigvis repræsenterer det nummer, du ønsker så præcist som du ønsker.
>> For eksempel antage, jeg går tilbage til dette program og ændre 0,1 til,
åh, 0,28, hvilket indikerer, at Jeg vil gerne printf til printf til
28 steder af præcision.
Lad os nu gemme og kompilere programmet, denne gang med make floats2.
Kør det med dot skråstreg floats2.
Og, kære Gud, denne gang jeg ser ikke 0,1, men 0.10000000, hvilket er temmelig
godt hidtil.
Men så, 14901161193847656250.
>> Nå, hvad sker der?
Tja, det viser sig, at en float er opbevares typisk inde i en computer
med 32 bit.
32 er naturligvis et endeligt antal, som indebærer, at du kun kan repræsentere
med 32 bit et endeligt antal af floating point-værdier.
Desværre, det betyder, at computer kan ikke repræsentere alle mulige
floating point tal eller reelle tal, der findes i verden,
fordi den kun har så mange bits.
>> Og så, hvad computeren er tilsyneladende gjort i dette tilfælde udgør 1/10 til
den tættest mulige flydende pointværdi, at det kan.
Men hvis vi ser, som vi har her, til 28 decimaler, begynder vi at se, at
upræcise.
Så dette er et problem med ingen perfekt løsning.
Vi kan bruge en dobbelt i stedet for en svømmer, som har en tendens til at anvende 64 bit som
modsætning til 32.
Men selvfølgelig, 64 er også begrænset, så problemet vil
forblive selv med double.