Ah sim, note que no último caso você efetivamente pegou a imprecisão do 0.3 e multiplicou por 3. Nas outras operações, você está usando doubles (mesmo no segundo caso, a conta é com double e o arredondamento para float é no final). Uma dica básica para evitar imprecisões como essa, além de usar tipos maiores, é quando possível multiplicar antes de dividir. Nesse caso, existe uma divisão por 10 (0.3 = 3/10). Se você mudar a conta para: (3*3) / 10.0 Nunca haverá imprecisão. E você pode usar float e o ponto decimal onde quiser. Isso evita multiplicar a imprecisão do float/double. E uma pequena imprecisão, quando multiplicada, pode virar um grande erro.
This message was edited 2 times. Last update was at 26/08/2008 15:12:43
|