CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

help rapide python imprécision arithmétique

MonsieurBeauf
MonsieurBeauf
Niveau 10
06 octobre 2019 à 22:30:59

Salut, je me suis rendu compte que j'avais une "fuite" d'erreur dans un calculateur que je fais en python, si je fais 0.65-0.30 il me sort 0.35000000000000003, je comprends que la représentation de nombres décimaux est pas top mais quelle est la manière la plus simple de corriger cette imprécision ?

MonsieurBeauf
MonsieurBeauf
Niveau 10
06 octobre 2019 à 22:32:54

Je pensais à utiliser round(x,précision voulue) mais je me demandais s'il y avait pas mieux pour régler le soucis autrement

_S0uL
_S0uL
Niveau 9
06 octobre 2019 à 22:59:10

En python, tu as le module decimal qui permet d'éliminer ces erreurs.

>>> .1 + .2
>>> 0.30000000000000004
>>> from decimal import Decimal
>>> float(Decimal('.1') + Decimal('.2'))
>>> 0.3

Tu as ce site qui est intéressant et donne l'explication à ce problème et la solution pour certains langages : https://0.30000000000000004.com/

Message édité le 06 octobre 2019 à 22:59:47 par _S0uL
godrik
godrik
Niveau 30
06 octobre 2019 à 22:59:38

c'est une question complique.il n'y a basiquement pas grand chose a faire. C'est comme ca que les nombres sont representes. Tu pourrais augmenter la precision des nombres en utilisant des doubles ou des quads. Mais ca ne resoud pas le probleme fondamental que c'est du calcul en precision flottante.
Tu pourrais utiliser une representation a point fixe mais ca a plein de contrainte en soi.
Tu pourrais utiliser une representation sous la form de chaine de charactere pour varier la precision comme tu le veux.
Tu pourrais utliser du calcul symbolique pour faire un calcul avec une precision plus eleve une fois que tu as l'expression complete.

La plupart du temps la bonne reponse est "est ce que c'est un vrai probleme d'avoir une approximation?" Et en moyenne la reponse es non. Souvent le vrai probleme est juste un probleme d'affichage, et il y a des parametres a printf qui fait l'arrondi a un precision particuliere.

MonsieurBeauf
MonsieurBeauf
Niveau 10
06 octobre 2019 à 23:06:49

Punaise ça doit faire 7-8 ans que je fais du C, je connaissais l'imprécision des décimaux, i3e 754 tout ça tout ça mais alors j'ai jamais encore eu de problème comme ça ahah

En tout cas merci pour vos réponses, vous avez sauvé ma soirée ahah <3
Je pensais, dans le futur, multiplier par le 10^d avec d le nombre de décimales max de 2 décimaux ( réels et rationnels c'est pas possible héhé ) à traiter puis de décaler salement la virgule en fonction de ce fameux d, ça se fait ou vaut mieux faire autrement comme les solutions que tu as proposé, Godrik ?

lokilok
lokilok
Niveau 16
07 octobre 2019 à 08:20:45

Si tu continues de stocker ça dans un float ça va rien changer, c'est pas parce que les chiffres sont à gauche de la virgule qu'ils sont plus précis.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment