Arrondi à partir d'une chaine de caractère [RESOLU] - Python - Programmation
Marsh Posté le 31-08-2009 à 17:03:17
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 :
|
Si tu réussis à négocier l'utilisation de modules externes, numpy & scipy ont probablement des outils intéressants.
Marsh Posté le 31-08-2009 à 20:59:33
Merci pour cette réponse. J'ignorai qu'il s'agissait d'un module standard...
Bonne soirée,
Fred
Marsh Posté le 31-08-2009 à 21:04:20
fraid49 a écrit : Merci pour cette réponse. J'ignorai qu'il s'agissait d'un module standard... |
Comme indiqué dans la documentation officielle du module il a été inclus à la stdlib dans Python 2.4.
Marsh Posté le 02-09-2009 à 19:06:36
Bon, ben en fait, après moults essais, j'ai enfin réalisé que le problème ne vient pas de mon programme mais du fichier stl (généré par CATIA), dont la précision est trop mauvaise.
Je ne m'en suis rendu compte que tardivement car je réalisai mes vérifications sous CATIA avec le fichier CATIA et pas avec le fichier STL (qui aurait donc tenu de la dégradation de la précision).
Désolé d'avoir ouvert un post pour rien et merci à Masklinn pour les réponses...
Bonne soirée,
Fred
Marsh Posté le 31-08-2009 à 16:51:58
Bonjour,
J'ai développé un script de traitement et analyse d'un fichier stl (fichier 3D d'un nuage de points) pour identifier des points de ce fichier de nuage de points (je ne suis pas opposé au fait de le poster mais il fait 250 lignes alors je le mettrai uniquement si on me le demande).
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.
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).
Là où ca se complique :
Mes essais :
Je ne sais pas quoi dire de plus, si ce n'est que j'espère qu'une solution existe et que quelqu'un aura la gentillesse de m'en faire part.
Merci d'avance et bonne journée,
Fred
Message édité par fraid49 le 02-09-2009 à 19:10:11