2010-02-26 1 views
0

Je viens juste de commencer à travailler avec la bibliothèque de précision arbitraire MPFR et j'ai très vite rencontré un comportement très bizarre. L'objectif principal de l'utiliser était d'améliorer la précision des trigrags de l'argument lagre et cela fonctionne extrêmement bien dans MPFR.Problème d'arrondi MPFR

Mais alors j'ai décidé de vérifier les mathématiques simples et c'était invincible - même dans les exemples simples avec des réponses strictes, les erreurs d'arrondi existent et ne dépend pas de la précision utilisée.

Même dans l'exemple comme 1.1 * 1 le résultat est 1.10000000000000008881784 ... Et ce résultat donné à une précision de 2000 bits (53 en double normal)!

Peut-être que c'est le problème de mon système, mais même dans MPFR en ligne existe des problèmes similaires. Vous pouvez essayer un tel exemple en ligne: http://ex-cs.sist.ac.jp/~tkouya/try_mpfr.html

1 * 1,1 @ 64 bits = 1,10000000000000000002

Mais la version en ligne se déplace plus avec une augmentation erreur de précision mais dans mon installation - pas.

Mon système: Ubuntu 9.10 + gmp 5.0.0.1 + mpfr 2.4.2

Répondre

3

This appears to be the canonical answer to floating-point precision issues. Il comprend une explication de pourquoi plus de bits ne résout pas le problème.

Vieille réponse

See question 7 of the MPFR FAQ. Quoi qu'il en soit, il y aura toujours une erreur, car de nombreux chiffres ne sont pas exactement représentable avec mantisses binaires, peu importe le nombre de bits que vous utilisez. Voir this answer à une question SO connexe pour une bonne explication.

+0

Merci! Convertir float -> string -> bigfloat résolu le problème avec l'indépendance de l'erreur de la précision. – Denis