>> DAVID Malan: Laten we nu Blow Your Mind.
Het blijkt in de praktijk 1 gedeeld 10 inderdaad 1/10 of 0,1.
Maar computers die slechts een eindige aantal bits waarmee
getallen, dat kan niet altijd nummers als 1/10 te vertegenwoordigen met
perfecte precisie.
Met andere woorden, computers soms uitspraak te bellen en niet te maken
noodzakelijkerwijs het nummer dat u willen zo precies u van plan bent.
>> Bijvoorbeeld, stel dat ik terug in dit programma en verander de 0,1 tot,
oh, 0.28, waardoor wordt aangegeven dat Ik wil graag printf printf aan
28 plaatsen van precisie.
Laten we nu slaan en het programma te compileren, dit keer met make floats2.
Voer het uit met stip slash floats2.
En, lieve God, deze keer zie ik niet 0,1, maar 0.10000000, dat is vrij
goed tot nu toe.
Maar dan, 14901161193847656250.
>> Nou, wat is er gaande?
Nou, het blijkt dat een float is typisch opgeslagen in een computer
met 32 ​​bits.
32 is uiteraard een eindig aantal dat houdt in dat u alleen kan vertegenwoordigen
met 32 ​​bits een eindig aantal van floating point waarden.
Helaas, dat betekent dat de computer kan niet alle mogelijke vormen
floating point getallen of reële getallen, die bestaan ​​in de wereld,
omdat het slechts zoveel bits.
>> En dus wat de computer is blijkbaar gedaan wordt in dit geval vertegenwoordigen 1/10 tot
zo nauw mogelijke drijvende punt waarde dat het kan.
Maar als we, zoals we hier hebben, tot en met 28 decimalen, beginnen we te zien dat
onnauwkeurigheid.
Dit is dus een probleem geen perfecte oplossing.
We kunnen een dubbel in plaats van een float, die de neiging heeft 64 bits gebruiken
tegen 32.
Maar natuurlijk, 64 is ook eindig, dus het probleem zal
blijven zelfs met tweepersoonskamers.