>> DAVID MALAN: La oss nå gi deg bakoversveis.
Det viser seg i den virkelige verden en delt ved 10 er faktisk 1/10 eller 0,1.
Men i datamaskiner som bare har en begrenset antall biter som å
representere tall, kan du ikke alltid representere tall som 1/10 med
perfekt presisjon.
Med andre ord, datamaskiner har noen ganger å gjøre dom samtaler og ikke
nødvendigvis representerer nummeret du ønsker så presist som du har tenkt.
>> For eksempel anta at jeg går tilbake til Dette programmet og endre 0,1 til,
å, 0.28, og derved indikerer at Jeg vil gjerne printf til printf til
28 steder av presisjon.
La oss nå lagre og kompilere programmet, denne gangen med make floats2.
Kjør den med dot slash floats2.
Og, kjære Gud, denne gang jeg ser ikke 0,1, men 0.10000000, noe som er ganske
bra så langt.
Men så, 14901161193847656250.
>> Vel, hva er det som skjer?
Vel, det viser seg at en float er vanligvis lagret inne i en datamaskin
med 32 bits.
32 er åpenbart et endelig antall, som innebærer at du kun kan representere
med 32 bits et endelig antall av flytende punkt verdier.
Uheldigvis betyr at at Datamaskinen kan ikke representere alle mulige
flyttall, eller reelle tall, som finnes i verden,
fordi den bare har så mange biter.
>> Og så hva maskinen er tilsynelatende gjøres i dette tilfellet er utgjøre 1/10 til
tettest mulig flytende punkt verdi som det kan.
Men hvis vi ser, som vi har her, til 28 desimaler, begynner vi å se at
imprecision.
Så dette er et problem med ingen perfekt løsning.
Vi kan bruke en dobbel i stedet for en dupp, som har en tendens til å bruke 64 biter som
motsetning til 32.
Men selvfølgelig, er 64 også begrenset, så problemet vil
forbli selv med dobles.