Pergunta

Acabei de começar a trabalhar com a biblioteca de precisão arbitrária MPFR e logo encontrei um comportamento muito estranho.O principal objetivo de usá-lo era melhorar a precisão dos trigonométricos do argumento lagre e isso funciona extremamente bem no MPFR.

Mas então decidi verificar a matemática simples e foi inacreditável - mesmo em exemplos simples com respostas estritas, existem erros de arredondamento e não dependem da precisão usada.

Mesmo no exemplo como 1,1 * 1 o resultado é 1,1000000000000008881784...E esse resultado é dado com uma precisão insana de 2.000 bits (53 em duplo normal)!

Talvez seja um problema do meu sistema, mas mesmo no MPFR online existem problemas semelhantes.Você pode tentar um exemplo online: http://ex-cs.sist.ac.jp/~tkouya/try_mpfr.html

1 * 1,1 @ 64 bits = 1,1000000000000000002

Mas a versão online move o erro ainda mais com aumento de precisão, mas na minha instalação - não.

Meu sistema:Ubuntu 9.10 + gmp 5.0.0.1 + mpfr 2.4.2

Foi útil?

Solução

Esta parece ser a resposta canônica para problemas de precisão de ponto flutuante.Inclui uma explicação de por que mais bits não resolve o problema.

Resposta Antiga

Consulte a pergunta 7 das Perguntas frequentes do MPFR. De qualquer forma, sempre haverá algum erro, já que muitos números não são exatamente representáveis ​​com mantissas binárias, não importa quantos bits você use.Ver esta resposta para uma pergunta SO relacionada para uma boa explicação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top