Problème d'arrondi

Fermé
MemeTech Messages postés 88 Date d'inscription mercredi 14 août 2019 Statut Membre Dernière intervention 7 janvier 2021 - 8 févr. 2020 à 15:03
MemeTech Messages postés 88 Date d'inscription mercredi 14 août 2019 Statut Membre Dernière intervention 7 janvier 2021 - 5 mars 2020 à 16:29
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 !

6 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.
2
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
9 févr. 2020 à 09:23
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://forums.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....
1
PowerIslandHD Messages postés 571 Date d'inscription dimanche 7 janvier 2018 Statut Membre Dernière intervention 8 juillet 2021 167
8 févr. 2020 à 15:05
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?
0
MemeTech Messages postés 88 Date d'inscription mercredi 14 août 2019 Statut Membre Dernière intervention 7 janvier 2021 1
8 févr. 2020 à 15:41
Que voulez-vous dire ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MemeTech Messages postés 88 Date d'inscription mercredi 14 août 2019 Statut Membre Dernière intervention 7 janvier 2021 1
9 févr. 2020 à 11:59
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.
0
MemeTech Messages postés 88 Date d'inscription mercredi 14 août 2019 Statut Membre Dernière intervention 7 janvier 2021 1
5 mars 2020 à 16:29
Ca y est !
J'ai entièrement mis à jour mon programme, mais un problème persiste :
Toutes les opérations fonctionnent, sauf entre complex et Decimal, comment contourner ce souci ?
0