>> DAVID MALAN: Vamos agora explodir sua mente.
Acontece que no mundo real 1 dividido por 10 é efectivamente 1/10, ou 0,1.
Mas, em computadores que só tem um finito número de bits com o qual
representar números, você não pode sempre representar números como 1/10 com
precisão perfeita.
Em outras palavras, por vezes, têm computadores para fazer chamadas de julgamento e não
representam, necessariamente, o número que quero tão precisamente quanto você pretende.
>> Por exemplo, suponha que eu volte para este programa e alterar a 0,1 e,
oh, 0,28, o que indica que Eu gostaria printf para printf para
28 locais de precisão.
Vamos agora salvar e compilar o programa, desta vez com make floats2.
Execute-o com um ponto floats2 barra.
E, meu Deus, desta vez eu não ver 0,1, mas 0.10000000, que é bastante
bom até agora.
Mas então, 14901161193847656250.
>> Bem, o que está acontecendo?
Bem, acontece que um float é tipicamente armazenados dentro de um computador
com 32 bits.
32 é, obviamente, um número finito, que implica que você só pode representar
com 32 bits um número finito de valores de ponto flutuante.
Infelizmente, isto significa que o computador não pode representar todos os possíveis
números de ponto flutuante, ou números reais, que existem no mundo,
porque só tem tantos bits.
>> E assim que o computador é aparentemente feito neste caso é representar 1/10 a
o mais próximo possível flutuante valor do ponto que ele pode.
Mas se olharmos, como nós temos aqui, a 28 de casas decimais, começamos a ver que
imprecisão.
Portanto, este é um problema com nenhuma solução perfeita.
Podemos usar um casal em vez de um carro alegórico, que tende a usar 64 bits como
vez de 32.
Mas, claro, 64 também é finito, então o problema vai
permanecem mesmo com duplos.