>> DAVID Malan: Imos agora explotar a súa mente.
Acontece que no mundo real 1 dividido por 10 é efectivamente 1/10, ou 0,1.
Pero, en ordenadores que só ten un finito número de bits co que
representar números, non poderá representar números como 1/10 en
precisión perfecta.
Noutras palabras, ás veces, teñen ordenadores para facer chamadas de xuízo e non
representan, necesariamente, o número que quero tan precisamente como pretende.
>> Por exemplo, supoñamos que eu volva para este programa e cambiar a 0,1 e,
Oh, 0,28, o que indica que Gustaríame printf para printf para
28 locais de precisión.
Imos agora gardar e compilar o programa, esta vez con make floats2.
Executa-o con un punto floats2 barra.
E, meu Deus, esta vez eu non ver 0,1, pero 0.10000000, que é moi
bo ata agora.
Pero entón, 14901161193847656250.
>> Ben, o que está a suceder?
Ben, acontece que un float é tipicamente almacenados dentro dun ordenador
con 32 bits.
32 é, obviamente, un número finito, que implica que só se pode representar
con 32 bits un número finito de valores de punto flotante.
Por desgraza, isto significa que o ordenador non pode representar as posibles
números de punto flotante, ou números reais, que existen no mundo,
porque só ten tantos bits.
>> E así que o ordenador é aparentemente feito neste caso é representar 1/10 a
o máis próximo posible flotante valor do punto que pode.
Pero se olharmos, como temos aquí, a 28 de cifras decimais, comezamos a ver que
imprecisión.
Polo tanto, este é un problema co ningunha solución perfecta.
Podemos usar unha parella en vez de un coche alegórico, que tende a usar 64 bits como
canto de 32.
Pero, claro, 64 tamén é finito, entón o problema vai
permanecen mesmo con dobres.