>> DAVID Malan: Poďme teraz fúkať vašu myseľ.
Ukazuje sa, že v reálnom svete 1 rozdeleného od 10 je skutočne 1/10, alebo 0.1.
Ale v počítačoch, ktoré majú obmedzené iba počet bitov, s ktorým
predstavujú čísla, môžete vždy predstavujú čísla ako 1/10 s
perfektné presnosť.
Inými slovami, počítače niekedy aby úsudok volanie a nie
nutne predstavovať číslo, ktoré Ak tak presne, ako máte v úmysle.
>> Predpokladajme napríklad, že som sa vrátiť do tento program a zmeňte 0,1 k,
oh, 0,28, čo naznačuje, že Rád by som printf printf na
28 miest presnosti.
Poďme teraz uložiť a skompilovať program, tentoraz s make floats2.
Spustite ho s dot lomítka floats2.
A bože, to keď vidím to 0,1, ale 0.10000000, čo je celkom
dobrý tak ďaleko.
Ale potom, 14901161193847656250.
>> No, čo sa deje?
No, ukázalo sa, že plavák je obvykle uložené vo vnútri počítača
s 32 bitmi.
32 je zrejme konečné číslo, ktoré znamená, že môžete predstavovať iba
s 32 bity konečným počtom plávajúce čiarkou.
Bohužiaľ, to znamená, že Počítač nemôže reprezentovať všetky možné
čísla s plávajúcou desatinnou čiarkou, alebo reálne čísla, ktoré existujú vo svete,
, Pretože to má len toľko bitov.
>> A tak to, čo počítač je zrejme vykonáva v tomto prípade predstavovať 1/10 až
najbližší možný plávajúce Bodová hodnota, že môže.
Ale keď sa pozrieme, ako sme tu, na 28. desatinné miesta, začneme vidieť, že
nepresnosť.
Takže sa jedná o problém s žiadne dokonalé riešenie.
Môžeme použiť double miesto float, ktorý inklinuje k použitiu 64 bitov ako
na rozdiel od 32.
Ale samozrejme, 64 je tiež konečný, takže problém bude
zostávajú aj pri štvorhre.