fraid49 a écrit :
Mon problème : Le programme fonctionne bien à part qu'il réalise des arrondis au moment où il transforme les lignes de caractères "intéressants" en float. Je sais pourquoi Python fait cela (l'histoire du codage des réels en base 2) mais je ne vois pas comment le résoudre.
|
En arrêtant d'utiliser des flottants
fraid49 a écrit :
A noter : Les nombres doivent être utilisés pour des calculs avec une grande précision (et donc être formaté en réel sans perte de précision, or je ne sais faire que les arrondi de chaine avec "%.xf" %). Le nombre utilisé dans les essais ci-après est très représentatif (il est extrait du fichier stl).
|
Tu ne peux pas "arrondir des flottants" quand la perte de précision est inhérente à la manière dont les flottants sont stockés.
Utilises le module decimal, il est beaucoup plus lent que le builtin float (parce qu'il n'utilise pas de floats/doubles hardware), mais il donne une précision illimitée (ou plus précisément une précision stricte et configurable, par défaut définie à 28 chiffres après la virgule).
Code :
>>> from decimal import Decimal as d >>> d('1.939120e+003') Decimal('1939.120') >>> 0.1+0.1+0.1 0.30000000000000004 >>> d('0.1') + d('0.1') + d('0.1') Decimal('0.3')
|
Si tu réussis à négocier l'utilisation de modules externes, numpy & scipy ont probablement des outils intéressants.
Message édité par masklinn le 31-08-2009 à 17:05:35
---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody