0.2*0.7=0.139999999999 ?
Résolu/Fermé
adrick33
Messages postés
26
Date d'inscription
jeudi 30 juillet 2015
Statut
Membre
Dernière intervention
14 juin 2017
-
Modifié le 14 juin 2017 à 12:11
_Ritchi_ Messages postés 21288 Date d'inscription samedi 17 mars 2007 Statut Contributeur Dernière intervention 11 novembre 2024 - 17 juin 2017 à 17:17
_Ritchi_ Messages postés 21288 Date d'inscription samedi 17 mars 2007 Statut Contributeur Dernière intervention 11 novembre 2024 - 17 juin 2017 à 17:17
A voir également:
- 0.2*0.7=0.139999999999 ?
- Scratch 0.2 - Télécharger - Éducatifs
- 0.2*31 - Guide
3 réponses
daminator25
Messages postés
3324
Date d'inscription
mardi 19 janvier 2010
Statut
Membre
Dernière intervention
25 janvier 2020
308
Modifié le 14 juin 2017 à 12:25
Modifié le 14 juin 2017 à 12:25
Bonjour,
Tu ne peux strictement rien y faire, ton ordinateur a sa manière de stocker les chiffres. Il fait au plus précis avec ce qu'il peut mais en réalité il ne stockera pas 0.03 mais peut être 0.029999998599968 car pour lui c'est le plus proche qu'il peut faire.
En fait pour être exacte l'ordinateur ne stocke pas une valeur mais une somme de fraction (1/3 + 1/8 + 6/33 + ...) et donc ça tombe pas forcément pile sur la valeur.
Du coup ce genre de problème tu ne peux que faire un arrondi pour ton résultat.
Parfois on peut éviter le problème par exemple en travaillant en centimes quand il s'agit de monétaire, mais sinon pas de contournement.
Tu peux essayer de modifier le type de valeur, (float, double, single ... pour affiner au mieux)
J'ai déjà rencontré ce problème.
Après la résolution de votre problème, ne vous barrez pas en courant ... Cochez votre sujet en "Résolu", Merci
Tu ne peux strictement rien y faire, ton ordinateur a sa manière de stocker les chiffres. Il fait au plus précis avec ce qu'il peut mais en réalité il ne stockera pas 0.03 mais peut être 0.029999998599968 car pour lui c'est le plus proche qu'il peut faire.
En fait pour être exacte l'ordinateur ne stocke pas une valeur mais une somme de fraction (1/3 + 1/8 + 6/33 + ...) et donc ça tombe pas forcément pile sur la valeur.
Du coup ce genre de problème tu ne peux que faire un arrondi pour ton résultat.
Parfois on peut éviter le problème par exemple en travaillant en centimes quand il s'agit de monétaire, mais sinon pas de contournement.
Tu peux essayer de modifier le type de valeur, (float, double, single ... pour affiner au mieux)
J'ai déjà rencontré ce problème.
Après la résolution de votre problème, ne vous barrez pas en courant ... Cochez votre sujet en "Résolu", Merci
Utilisateur anonyme
14 juin 2017 à 21:55
14 juin 2017 à 21:55
Bonsoir,
je me permets une petite correction.
Pour un ordinateur, un nombre réel n'est pas une somme de fraction, mais un nombre à virgule flottante, voir cet article Wikipédia. Il faut penser qu'il travaille en binaire et non en décimal, c'est ce qui explique que les nombres "possibles" ne sont pas continus.
En décimal avec 14 chiffres significatifs on peut passer de 29999998599968 * 10^-16 à 29999998599969 * 10^-16.
En binaire on va se retrouver avec quelque chose du genre 1010101010101101010101010101101010 * 10^-10101010101010101000101010101 et incrémenter de 1 la mantisse donnera une correspondance discontinue en décimal.
je me permets une petite correction.
Pour un ordinateur, un nombre réel n'est pas une somme de fraction, mais un nombre à virgule flottante, voir cet article Wikipédia. Il faut penser qu'il travaille en binaire et non en décimal, c'est ce qui explique que les nombres "possibles" ne sont pas continus.
En décimal avec 14 chiffres significatifs on peut passer de 29999998599968 * 10^-16 à 29999998599969 * 10^-16.
En binaire on va se retrouver avec quelque chose du genre 1010101010101101010101010101101010 * 10^-10101010101010101000101010101 et incrémenter de 1 la mantisse donnera une correspondance discontinue en décimal.
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
14 juin 2017 à 22:31
14 juin 2017 à 22:31
Remarque : cela revient quand même un peu à une somme de fraction.
Par contre ce sera des diviseurs en puissance de 2, de même qu'en décimal c'est des diviseurs en puissance de 10.
En décimal : 0.14 = 1/10 + 4/100
En binaire : 0.14 = 1/8 + 1/128 + 1/256 + 1/512 + 1/1024 + 1/4096 + ...
En fait ici on a le même problème que pour 1/3 = 0.33333333333333 en décimal, avec une infinité de 3 à la fin.
Parce que en binaire 0.14 s'écrit :
Par contre ce sera des diviseurs en puissance de 2, de même qu'en décimal c'est des diviseurs en puissance de 10.
En décimal : 0.14 = 1/10 + 4/100
En binaire : 0.14 = 1/8 + 1/128 + 1/256 + 1/512 + 1/1024 + 1/4096 + ...
En fait ici on a le même problème que pour 1/3 = 0.33333333333333 en décimal, avec une infinité de 3 à la fin.
Parce que en binaire 0.14 s'écrit :
0.001000 1110101110001010001 1110101110001010001 1110101110001010001...avec une infinité de 1110101110001010001 à la fin.
daminator25
Messages postés
3324
Date d'inscription
mardi 19 janvier 2010
Statut
Membre
Dernière intervention
25 janvier 2020
308
15 juin 2017 à 15:49
15 juin 2017 à 15:49
En effet je ne me souvenais plus que c'était des puissances de 2. J'aurais du m'en douter ... Car mes dénominateurs n'avaient aucun sens !
J'avais lu un jour l'astuce en vitesse, ça m'avait pas trop chamboulé a l'époque et la quand je dois retrouver la solution je suis bien embêté car je me souvenais plus :)
Merci pour la correction, je saurai pour la suite.
J'avais lu un jour l'astuce en vitesse, ça m'avait pas trop chamboulé a l'époque et la quand je dois retrouver la solution je suis bien embêté car je me souvenais plus :)
Merci pour la correction, je saurai pour la suite.
_Ritchi_
Messages postés
21288
Date d'inscription
samedi 17 mars 2007
Statut
Contributeur
Dernière intervention
11 novembre 2024
6 078
Modifié le 17 juin 2017 à 17:19
Modifié le 17 juin 2017 à 17:19
Bonjour,
Je t'invite à aller sur cette page Sam et Mac: les nombres en Python qui est assez ludique. Tu trouveras la réponse à ta question dans le paragraphe "L’éternel problème de la virgule qui part en couille" . Tu y découvriras que l'on peut faire quelque chose pour que 0.2*0.7 fasse 0.14
Ritchi
Je t'invite à aller sur cette page Sam et Mac: les nombres en Python qui est assez ludique. Tu trouveras la réponse à ta question dans le paragraphe "L’éternel problème de la virgule qui part en couille" . Tu y découvriras que l'on peut faire quelque chose pour que 0.2*0.7 fasse 0.14
Ritchi
14 juin 2017 à 12:41