>> DAVID MALAN: Hai acum sufla mintea ta.
Se pare în lumea reală 1 împărțit 10 este într-adevăr de 1/10, sau 0,1.
Dar în computere care au doar o finit Numărul de biți în care să
reprezintă numere, nu poți întotdeauna reprezintă numere, cum ar fi 1/10 cu
precizie perfectă.
Cu alte cuvinte, computere, uneori, au pentru a efectua apeluri de judecată și nu
reprezintă în mod necesar numărul pe care Vreau ca exact cum intenționați.
>> De exemplu, să presupunem că mă întorc în acest program și schimba 0,1 la,
oh, 0,28, indicând astfel că Aș vrea să printf printf la
28 de locuri de precizie.
Hai acum salva și compila programul, de data aceasta cu make floats2.
Rulați-l cu punct floats2 slash.
Și, Doamne, de data aceasta eu nu văd 0.1, dar 0.10000000, care este destul de
bine până acum.
Dar apoi, 14901161193847656250.
>> Ei bine, ce se întâmplă?
Ei bine, se pare că un flotor este de obicei stocat în interiorul unui calculator
cu 32 de biți.
32 este în mod evident un număr finit, care implică faptul că poate reprezenta doar
cu 32 de biți un număr finit plutitoare de valori punct.
Din păcate, acest lucru înseamnă că calculator nu poate reprezenta toate posibile
numere în virgulă mobilă, sau numere reale, care există în lume,
deoarece are atât de multe biți.
>> Și ce computerul este aparent face în acest caz se reprezintă 1/10 până la
cel mai apropiat posibil flotarea Valoarea punct că se poate.
Dar dacă ne uităm, așa cum avem aici, la 28 zecimale, vom începe să vedem că
imprecizie.
Deci, aceasta este o problemă cu nici o soluție perfectă.
Putem folosi o dublă în loc de un flotor, care tinde să folosească 64 de biți ca
spre deosebire de 32.
Dar, desigur, 64 este, de asemenea, finit, deci problema va
rămâne chiar și cu camere duble.