>> DAVID Malan: Gadewch i ni yn awr chwythu eich meddwl.
Mae'n troi allan yn y byd go iawn 1 rhannu 10 yn wir 1/10, neu 0.1.
Ond mewn cyfrifiaduron mai dim ond yn cael gyfyngedig nifer o ddarnau i'w defnyddio i
gynrychioli rhifau, ni allwch bob amser gynrychioli rhifau fel 1/10 gyda
cywirdeb perffaith.
Mewn geiriau eraill, cyfrifiaduron weithiau i wneud galwadau barn ac nid
o reidrwydd yn cynrychioli nifer i chi eisiau mor fanwl ag y byddwch yn bwriadu.
>> Er enghraifft, mae'n debyg fy mod yn mynd yn ôl i mewn i rhaglen hon a newid y 0.1 i,
oh, 0.28, gan nodi bod Hoffwn printf i printf i
28 o leoedd o drachywiredd.
Gadewch i ni yn awr yn arbed ac yn llunio rhaglen, y tro hwn gyda gwneud floats2.
Rhedeg gyda floats2 slaes dot.
Ac, annwyl Duw, y tro hwn nid wyf yn gweld 0.1, ond 0.10000000, sydd yn eithaf
da hyd yn hyn.
Ond wedyn, 14901161193847656250.
>> Wel, beth sy'n mynd ymlaen?
Wel, mae'n ymddangos fod fflôt yn fel arfer yn storio y tu mewn cyfrifiadur
gyda 32 darnau.
32 yn amlwg yn nifer cyfyngedig, a oedd yn yn awgrymu y gallwch ond yn cynrychioli
gyda 32 darnau nifer cyfyngedig o fel y bo'r angen gwerthoedd pwynt.
Yn anffodus, mae hynny'n golygu bod y Ni all cyfrifiadur gynrychioli'r holl posibl
rhifau pwynt arnawf, neu rhifau real, sy'n bodoli yn y byd,
oherwydd ei fod dim ond cymaint o ddarnau.
>> Ac felly yr hyn y mae'r cyfrifiadur yn ôl pob golwg wneud yn yr achos hwn yn cynrychioli 1/10 i
y cefnogaeth symudol agosaf posibl gwerth pwynt y gall.
Ond os ydym yn edrych, fel sydd gennym yma, i 28 lle degol, rydym yn dechrau gweld bod
anfanyldeb.
Felly, mae hyn yn broblem gyda dim ateb perffaith.
Gallwn ddefnyddio dwbl yn hytrach na float, sy'n tueddu i ddefnyddio 64 darnau fel
hytrach na 32.
Ond wrth gwrs, 64 hefyd yn gyfyngedig, felly mae'r broblem yn
yn parhau i fod hyd yn oed gyda dyblau.