>> DAVID Malan: Ni nun blovi vian menson.
Ĝi rezultas en la reala mondo 1 dividita per 10 Estas ja 1/10, aŭ 0.1.
Sed en komputiloj kiuj havas nur finian nombro de bitoj kun kiu
reprezenti nombrojn, vi ne povas ĉiam reprezenti nombrojn kiel 1/10 kun
perfekta precizeco.
En aliaj vortoj, komputiloj kelkfoje havas por fari jugxon nomitaj kaj ne
nepre reprezentas la numeron vi senhaveco kiel ĝuste kiel vi celas.
>> Ekzemple, supozu Mi iros returne en tiun programon kaj ŝanĝi la 0,1 al,
oh, 0.28, tiel indikante ke Mi ŝatus printf al printf al
28 lokoj de precizeco.
Ni nun savu kaj kompili la programon, tiu tempo kun make floats2.
Ruli ĝin per skalara oblikvo floats2.
Kaj, kara Dio, ĉifoje mi ne vidas 0.1, sed 0.10000000, kiu estas bela
bona ĝis nun.
Sed tiam, 14901161193847656250.
>> Nu, kio okazas?
Nu, tio rezultas ke float estas tipe konservataj ene de komputilo
kun 32 bitoj.
32 estas evidente finia nombro, kiun implicas ke oni povas nur reprezentas
kun 32 bitoj finia nombro de flosanta punkto valoroj.
Bedaŭrinde, tio signifas, ke la komputilo ne povas reprezenti tutan eblan
flosantaj punktaj nombroj, aŭ realaj nombroj, kiuj ekzistas en la mondo,
ĉar ĝi havas nur tiom da bitoj.
>> Kaj do, kion la komputilo estas ŝajne farita en ĉi tiu kazo estas reprezenti 1/10 ĝis
la plej proksima ebla glitpunkta punkto valoro kiun ĝi povas.
Sed se ni rigardos, kiel ni havas ĉi tie, ĝis la 28 dekumaj lokoj, ni komencas vidi, ke
imprecision.
Do tiu estas problemo kun neniu perfekta solvo.
Ni povas uzi duoblan anstataŭ kaleŝego, kio emas uzi 64 bitojn kiel
kontraste al 32.
Sed kompreneble, 64 ankaŭ estas finia, do la problemo estos
resti eĉ kun duoblaj.