Problème d'arrondi

Signaler
Messages postés
72
Date d'inscription
mercredi 14 août 2019
Statut
Membre
Dernière intervention
9 février 2020
-
MemeTech
Messages postés
72
Date d'inscription
mercredi 14 août 2019
Statut
Membre
Dernière intervention
9 février 2020
-
Bonjour !
En Python, il est parfois compliqué de faire des opérations comme 0.1 * 3, qui donnent des résultats assez... exotiques :

>>> 0.1 * 3
0.30000000000000004

De même avec les fonctions trigonométriques : on obtient des résultats inexacts.


J'ai essayé dans mon application de maths d'arrondir les résultats entre 3 et 12 décimales pour obtenir des nombres cohérents, mais un problème est apparu : quand on utilise de toutes petites constantes comme celle de Planck (6.626e-34), les résultats sont logiquement arrondis à zéro !

J'ai voulu annuler l'arrondi pour les chiffres inférieurs à : 10 ^ (- nombre_decimales) afin de pouvoir afficher aussi ces résultats, mais manque de chance : le problème initial revient :

>>> sin (pi)
1.2246467991473532e-16

Quelle que soit la précision de la constante e...

Comment faire pour avoir des arrondis corrects sans perdre en précision sur plus petits nombres ?
Merci !

5 réponses

Bonjour,

Si tu as besoin d'une telle précision, il y a le module decimal de python qui devrait résoudre ce problème.
Messages postés
14239
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 février 2020
459
Bonjour

Dans la vraie vie, on peut écrire une infinité de nombres parce « qu’il suffit d’ajouter un chiffre » pour qu’il se concrétise.

L’informatique vient de l’électronique et là ça se complique, un nombre à une taille définit de bits et on fait avec.
Du coup, les nombres à virgule flottantes sont utilisés pour représentés un nombre décimal
Ici https://www.commentcamarche.net/forum/affich-35846831-erreur-de-calcul#3
J’ai proposé une explication un peu généraliste.
DalFab et Reiverax ont par la suite donné des precisions.

Tu peux aussi lire le paragraphe « l’éternel problème de la virgule qui part en couille » http://sametmax.com/les-nombres-en-python/
Sous un ton un peu cassant, il rappelle que cette question est aussi vielle que l’informatique, elle a donc été posée des milliers de fois sur le net.
Il suffit donc de faire l’effort de chercher un peu pour trouver par soi même.
Et tu sais le plus drôle, quand on cherche un peu, on tombe sur ta propre question sur la fonction sinus où j’ai déjà abordé le sujet....
Messages postés
461
Date d'inscription
dimanche 7 janvier 2018
Statut
Membre
Dernière intervention
18 février 2020
42
Bonjour,
cela vient du type de caractère que vous avez mis pour le résultat non?
Du genre int ou float ou encore double?
Messages postés
72
Date d'inscription
mercredi 14 août 2019
Statut
Membre
Dernière intervention
9 février 2020

Que voulez-vous dire ?
Messages postés
72
Date d'inscription
mercredi 14 août 2019
Statut
Membre
Dernière intervention
9 février 2020

Merci pour vos réponses !
Je suis en train de bidouiller avec le module decimal, ça m'a tout l'air de fonctionner, du moins, pour le moment !
Et oui, j'avais en effet posé une question à propos de la précision des calculs, mais je n'avais pas trouvé de solution qui convienne pour tout à cause des nombres proches de 0 et je ne voulais pas déterrer le sujet...
Merci encore, je regarde ça de plus près avant de passer en résolu.