--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~------------------------------
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~------------
Julierme,Primeiramente, Bem-vindo ao grupo!Segundo, e grosso modo, você nunca deve comparar números de ponto flutuante com exatidão. Usamos uma tolerância pra considerar a igualdade [1].
--
Isto eh importante, mas o mais importante estah nos linques citados. Existem outras coisas alem deste detalhe relacionado ao tipo do literal sobre comparacao de floats, e o buraco destas outras comparacoes eh muito mais embaixo, muito dificil de deduzir.
Você está no caminho certo mas não é só uma questão de constantes, e sim de representação computacional do ponto flutuante. Toda conta com ponto flutuante pode gerar um erro de precisão e a comparação de igualdade vai falhar.
Proponho um teste para você fazer usando floats e doubles. Faça um for somando todos os números de 1 a 10.000. Faça outro for somando de 10.000 a 1. Compare os resultados. Faça a fórmula da soma de uma P.A., compare o resultado.
Na matemática estes três números são iguais. Mas em computação pode dar três números diferentes. Próximos, mas diferentes. Não fiz o teste com esses números exatamente, pode até ser que gere números iguais. Mas vai ser pura sorte.
- Minha dedução:O problema está na declaração de constantes dentro do código. Isso mesmo, constantes.Sempre que colocamos um número REAL dentro do código que NÃO tenha sido atrelado a um tipo, o COMPILADOR passa a tratar este numero real, por padrão, como sendo uma constante do tipo DOUBLE!
Em 25 de novembro de 2015 10:42, P. <pedro....@gmail.com> escreveu:
> Já que todos deram excelentes dicas sobre a problemática do ponto flutuante,
> darei uma dica na transversal.
> Você está trabalhando com uma máquina, e não com um fenômeno natural.
Eu desconfio que ele esteja trabalhando com "um fenômeno natural" pelo valor
9.8 que ele usa, nesse caso o valor da aceleração devido a gravidade
na superfície
da terra, pode confirmar Julierme?
O double 9.8 em memória fica assim:bits =0101100110011001100110011001100110011001100110011100010000000010