Antes de mais nada, leiam devagar! leiam devagar 
Pessoal, considerem a seguinte conta em Java (tirei de uma discussão interessante no RioJUG)
Na base 2 pelo o que calculei, 1.6 = 1.100110011001… e 4.8 = 100.110011001100…
Ou seja, eles são dízimas periódicas. Eu gostaria de saber ou lembrar:
:arrow: (1) como é feito o processo de arredondamento, já que por mais extensa que seja a mantissa usada (quanto mais períodos pegarmos), mais exato será a conversão de volta pra decimal, porém nunca chegando ao valor exato original. Por exemplo, considerando 4.8, usando um período da dízima mais um bit, em binário, temos:
:arrow: (2) É impressão minha ou o número de casas fracionárias em binário é o mesmo o de casas no decimal? Existe alguma relação lógica ou no exemplo acima foi só coincidência?
:arrow: (3) Eu concluí que é feito um arredondamento até o número de casas que se está trabalhando, no caso de 1.6 * 3 é uma casa, então vamos arredondando:
4.78125 > 4.7813 > 4.781 > 4.78 > 4.8 (valor correto em decimal)
É assim mesmo? Na verdade apenas um período da dízima seria necessário para o arredondamento, assim teríamos 100.1100 = 4.75, que arredonda pra cima e dá 4.8. É isso?
:arrow: (4) Por que em Java, usando double ou foat (pior), 1.6 * 3 > 4.8? O ponto é: como um arredondamento pode dar mais que 4.8 e não menos? Se pegarmos 100.110011001100… e arredondarmos, como isso pode dar mais que 4.8?
Eu mandei imprimir (1.6f * 3) e (1.6 * 3), que deram isso aqui:
4.800000190734863
4.800000000000001
:arrow: (5) Sabemos que quando comparamos floats, devemos especificar uma “faixa de tolerância” pela qual eles serão considerados iguais ou não. Mas no caso de cálculos como o do exemplo, não seria melhor truncar o resultado de acordo com o número de casas que se está trabalhando? Ou mesmo arredondar…No exemplo, só consideraríamos a primeira casa fracionária de 4.800000190734863 ou 4.800000000000001, o que dá ambos 4.8. Truncar ou arredondar? Se o 1.6 vêm do usuário, acho que o arredondamento seria melhor…É isso?
Valeu…
EDIT: acho que postei no fórum errado, desculpem, se alguém puder mover eu agradeço…
