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.