Problème de somme
loki9678
-
Phil_1857 Messages postés 1872 Date d'inscription Statut Membre Dernière intervention -
Phil_1857 Messages postés 1872 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
A voir également:
- Problème de somme
- Formule somme excel colonne - Guide
- Somme si couleur - Guide
- Somme en anglais excel - Guide
- Somme de x dans excel ✓ - Forum Excel
- Problème somme excel 0 - Forum Excel
3 réponses
Bonjour
Je me demande si ca ne serait pas un souci (connu ?) des nombres floatant..
Peux tu tester comme ceci ?
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
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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:
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 executant
j'ai l'erreur: AttributeError: 'int' object has no attribute 'Decimal'
En executant
print(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 :
ou:
J'utilise plutôt des petites fonctions du style:
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)
L'idée c'est de toujours passer par un nombre entier d'abord et ensuite de diviser par 10 par exemple pour revenir sur un réel ?
C'est un "bug" courant en programmation sur l'addition ou la soustraction de nombres de rype float.
Et donc Par 10 ou par 100 (selon le nombre de decimales désirées)