Problème de somme
loki9678
-
Phil_1857 Messages postés 1883 Date d'inscription Statut Membre Dernière intervention -
Phil_1857 Messages postés 1883 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je dois faire un travail d'informatique en utilisant python. Cependant durant mon développement du code je suis tombé sur une erreur plutôt bizarre . Voici le bout de mon programme qui bug :
Je souhaite donc vérifier si l'évolution de ma variable k se fait bien, donc en théorie je devrait obtenir 0.0, 0.1, 0.2,...,9.8, 9.9, 10.0
Cependant voici ce que j'obtient :
Très vite les valeurs ont des décimales qui apparaissent de nulles part et donc l'évolution de ma variable k est bizarre
Je ne suis pas habitué à utiliser python mais pour le coup je ne comprend pas d'où pourrait venir l'erreur
Si quelqu'un peut m'éclairer svp ca serait génial :)
Merci
Je dois faire un travail d'informatique en utilisant python. Cependant durant mon développement du code je suis tombé sur une erreur plutôt bizarre . Voici le bout de mon programme qui bug :
k=0.0
while k <= 10:
print(k)
k=k+0.1
Je souhaite donc vérifier si l'évolution de ma variable k se fait bien, donc en théorie je devrait obtenir 0.0, 0.1, 0.2,...,9.8, 9.9, 10.0
Cependant voici ce que j'obtient :
0.0 0.1 0.2 0.30000000000000004 . . . 1.4000000000000001 1.5000000000000002 . . . 2.500000000000001 2.600000000000001 . . . 4.699999999999999 4.799999999999999 4.899999999999999 4.999999999999998 5.099999999999998 5.1999999999999975 5.299999999999997 5.399999999999997 . . . 8.699999999999985 . . . 9.89999999999998 9.99999999999998
Très vite les valeurs ont des décimales qui apparaissent de nulles part et donc l'évolution de ma variable k est bizarre
Je ne suis pas habitué à utiliser python mais pour le coup je ne comprend pas d'où pourrait venir l'erreur
Si quelqu'un peut m'éclairer svp ca serait génial :)
Merci
3 réponses
-
Bonjour
Je me demande si ca ne serait pas un souci (connu ?) des nombres floatant..
Peux tu tester comme ceci ?k= (k*10+1)/10
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
Python travaille en binaire, et 0.1 n'est donc pas exactement égal à ce que tu imagines, ce qui explique ce comportement.
Si tu veux travailler en décimal:import decimal ud=decimal.Decimal(1)/decimal.Decimal(10) k=decimal.Decimal(0) while k <= 10: print(k) k=k+ud -
Bonjour yg_be,
En executantprint(decimal.Decimal(1))
j'ai l'erreur: AttributeError: 'int' object has no attribute 'Decimal'-
- Bien vu !
En fait j'avais copié ton code dans un fichier fourre-tout maths.py qui me sert à faire des tests ...
Sinon, ça n'est pas vraiment un bug, c'est simplement la représentation en interne des nombres décimaux
Par exemple, on ne fais jamais, avec des float :
if(a==b):
ou:if(a>b):
J'utilise plutôt des petites fonctions du style:
TOL = 0.000001 def is_equal(v1,v2): ''' Checks if v1 == v2 ''' if(abs(v1-v2) < TOL): return(True) else: return(False)
-