[Cascavel-pm] Números Flutuantes

Marques & Corrêa Ltda. flavio em marquescorrea.com.br
Segunda Setembro 15 09:34:32 CDT 2003


Em Sáb 13 Set 2003 18:30, Fabiano Reese Righetti escreveu:
>    Olá pessoal!
>    Estou com o seguinte problema com pontos flutuantes: Quando efetuo a
> seguinte conta ((((-1/5)*3)*5)+3) o resultado correto seria 0 (zero) mas
> ele resulta no seguinte:
>
> $ perl -e 'printf "%0.55f\n",((((-1/5)*3)*5)+3);'
> -0.0000000000000004440892098500626161694526672363281250000
> $
>
>    Alguém saberia como tratar este tipo de problema?
>
> Abraços.

Fabiano,
	a causa própriamente dita eu já li, mas não me lembro mais aonde e nem quando 
exatamente. Este problema eu já enfrentei em C/C++, PASCAL, PHP e outros. Se 
me recordo bem, posso estar enganado :), quando você divide dois valores tipo 
"float" o valor é sempre "meio-exato", a solução que tenho adotado é diminuir 
a precisão. No seu caso, se fosse o meu, faria da seguinte forma:

$ perl -e 'printf "%0.15f\n",((((-1/5)*3)*5)+3);'.

Como eu trabalho com aplicações financeiras/contábeis e não fins científicos, 
que pode ser o caso, faria :

$ perl -e 'printf "%0.2f\n",((((-1/5)*3)*5)+3);'.



Mais detalhes sobre a lista de discussão Cascavel-pm