>> DAVID Malan: Pojďme nyní foukat vaši mysl.
Ukazuje se, že v reálném světě 1 rozděleného od 10 je skutečně 1/10, nebo 0.1.
Ale v počítačích, které mají omezené pouze počet bitů, se kterým
představují čísla, můžete vždy představují čísla jako 1/10 s
perfektní přesnost.
Jinými slovy, počítače někdy aby úsudek volání a ne
nutně představovat číslo, které Chcete-tak přesně, jak máte v úmyslu.
>> Předpokládejme například, že jsem se vrátit do tento program a změňte 0,1 k,
oh, 0,28, což naznačuje, že Rád bych printf printf na
28 míst přesnosti.
Pojďme nyní uložit a zkompilovat program, tentokrát s make floats2.
Spusťte ho s dot lomítka floats2.
A bože, to když vidím to 0,1, ale 0.10000000, což je docela
dobrý tak daleko.
Ale pak, 14901161193847656250.
>> No, co se děje?
No, ukázalo se, že plovák je obvykle uloženy uvnitř počítače
s 32 bity.
32 je zřejmě konečné číslo, které znamená, že můžete představovat pouze
s 32 bity konečným počtem plovoucí čárkou.
Bohužel, to znamená, že Počítač nemůže reprezentovat všechny možné
čísla s plovoucí desetinnou čárkou, nebo reálná čísla, které existují ve světě,
, protože to má jen tolik bitů.
>> A tak to, co počítač je zřejmě provádí v tomto případě představovat 1/10 až
nejbližší možný plovoucí Bodová hodnota, že může.
Ale když se podíváme, jak jsme tady, na 28. desetinná místa, začneme vidět, že
nepřesnost.
Takže se jedná o problém s žádné dokonalé řešení.
Můžeme použít double místo float, který inklinuje k použití 64 bitů jako
na rozdíl od 32.
Ale samozřejmě, 64 je také konečný, takže problém bude
zůstávají i při čtyřhře.