Erreur de calcul ???
Résolu/Fermé
Nico_63
Messages postés
41
Date d'inscription
dimanche 3 novembre 2013
Statut
Membre
Dernière intervention
27 mai 2023
-
Modifié le 3 févr. 2019 à 13:09
Nico_63 Messages postés 41 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 27 mai 2023 - 4 févr. 2019 à 10:26
Nico_63 Messages postés 41 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 27 mai 2023 - 4 févr. 2019 à 10:26
A voir également:
- Erreur de calcul ???
- Erreur 0x80070643 - Accueil - Windows
- Calcul moyenne excel - Guide
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Calcul charpente bois gratuit - Télécharger - Architecture & Déco
5 réponses
NHenry
Messages postés
15163
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 novembre 2024
341
3 févr. 2019 à 13:25
3 févr. 2019 à 13:25
C'est normal, c'est la représentation des nombre à virgule flottante qui fait cela.
Utilisateur anonyme
3 févr. 2019 à 14:09
3 févr. 2019 à 14:09
Salut, c'est l'application binaire de la virgule flottante en fait....
Mais ça n'explique pas à Nico_63.
Imaginons une calculatrice qui peut afficher 4 chiffres, la virgules et 1 chiffre pour la notation scientifique (xxxx * 10 puissance y).
Si tu fais 9999 + 1, elle va afficher 1,000 * 10^4
Si tu fais encore plus 1 même affichage
Si tu fais encore plus 1 même affichage
Si tu fais encore plus 1 même affichage
Si tu fais encore plus 1 même affichage
Si tu fais encore plus 1 même affichage
Si tu fais encore plus 1 (10 005) elle va peut-être arrondir à 1,001 * 10^4
On voit qu'en quelque sorte certains nombre "n'existent pas".
Et encore elle aurait pu afficher 10,00 * 10^3 et là encore plus de nombres "n'existent pas", c'est ce qu'on appelle la notation à virgule flottante. Les 4 chiffres sont la mantisse et la puissance est l'exposant
En informatique la capacité de stockage et limitée, alors que les nombres sont pas définition infinis. Il a donc été décider des stocker les nombres décimaux sous la forme de nombre à virgule flottante. L'informatique fonctionnant par de l'électronique, cela est calculé en binaire, et la représentation dispose d'un certain nombre de bits pour la mantisse, et d'un certain nombre de bits pour l'exposant. La répartition dépend si le type choisi est codé sur 8, 16, 32 ou 64 bits.
De fait tout nombre qui ne colle pas au calcul est représenté par un proche, et n'existe réellement pas pour l'ordinateur.
Plus d'info
https://fr.wikipedia.org/wiki/Virgule_flottante
Mais ça n'explique pas à Nico_63.
Imaginons une calculatrice qui peut afficher 4 chiffres, la virgules et 1 chiffre pour la notation scientifique (xxxx * 10 puissance y).
Si tu fais 9999 + 1, elle va afficher 1,000 * 10^4
Si tu fais encore plus 1 même affichage
Si tu fais encore plus 1 même affichage
Si tu fais encore plus 1 même affichage
Si tu fais encore plus 1 même affichage
Si tu fais encore plus 1 même affichage
Si tu fais encore plus 1 (10 005) elle va peut-être arrondir à 1,001 * 10^4
On voit qu'en quelque sorte certains nombre "n'existent pas".
Et encore elle aurait pu afficher 10,00 * 10^3 et là encore plus de nombres "n'existent pas", c'est ce qu'on appelle la notation à virgule flottante. Les 4 chiffres sont la mantisse et la puissance est l'exposant
En informatique la capacité de stockage et limitée, alors que les nombres sont pas définition infinis. Il a donc été décider des stocker les nombres décimaux sous la forme de nombre à virgule flottante. L'informatique fonctionnant par de l'électronique, cela est calculé en binaire, et la représentation dispose d'un certain nombre de bits pour la mantisse, et d'un certain nombre de bits pour l'exposant. La répartition dépend si le type choisi est codé sur 8, 16, 32 ou 64 bits.
De fait tout nombre qui ne colle pas au calcul est représenté par un proche, et n'existe réellement pas pour l'ordinateur.
Plus d'info
https://fr.wikipedia.org/wiki/Virgule_flottante
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
3 févr. 2019 à 19:47
3 févr. 2019 à 19:47
On peut se demander dans le cas présent d'où y a-t-il des décimales en trop grande quantité. C'est le nombre 0.1 qui n'a qu'une décimale en base 10 et en a une infinité en base 2 (il existe des cas inverses par exemple 2/3 n'a qu'une décimale en base 3 où il s'écrit 0.2 alors qu'il en a une infinité en base 10, il vaut 0.66666666...). Le système ne peut garder que 53 chiffres binaires et une fois reconverti en base 10, le nombre le plus proche de 0.1 est 0.1000000000000000055511151231257827021181583404541015625
D'où la séquence qui s'est produite est :
2
2.100000000000000088817841970012523233890533447265625
2.20000000000000017763568394002504646778106689453125
2.300000000000000266453525910037569701671600341796875
2.4000000000000003552713678800500929355621337890625
2.500000000000000444089209850062616169452667236328125
Mais le print décide de n'afficher qu'un certain nombre de chiffres et arrondit à
2
2.1000000000000000
2.2000000000000002
2.3000000000000003
2.4000000000000004
2.5000000000000004
D'où la séquence qui s'est produite est :
2
2.100000000000000088817841970012523233890533447265625
2.20000000000000017763568394002504646778106689453125
2.300000000000000266453525910037569701671600341796875
2.4000000000000003552713678800500929355621337890625
2.500000000000000444089209850062616169452667236328125
Mais le print décide de n'afficher qu'un certain nombre de chiffres et arrondit à
2
2.1000000000000000
2.2000000000000002
2.3000000000000003
2.4000000000000004
2.5000000000000004
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
Modifié le 4 févr. 2019 à 09:32
Modifié le 4 févr. 2019 à 09:32
Bonjour,
Je vais compléter ces réponses en te parlant d'une solution.
Comme tu t'en doutes, il est des domaines où la moindre erreur de calcul, dût-elle se situer au 10ème chiffre après la virgule, peut avoir des conséquences désastreuses. Aéronautique, spatial, finance, etc.
Comment font-ils ?
Ils utilisent le type decimal, qui a été créé justement pour éviter les écueils du type float.
Pour plus d'informations, n'étant pas moi-même spécifiquement un développeur python, je t'invite à lire la documentation : https://docs.python.org/fr/2/library/decimal.html
Xavier
Je vais compléter ces réponses en te parlant d'une solution.
Comme tu t'en doutes, il est des domaines où la moindre erreur de calcul, dût-elle se situer au 10ème chiffre après la virgule, peut avoir des conséquences désastreuses. Aéronautique, spatial, finance, etc.
Comment font-ils ?
Ils utilisent le type decimal, qui a été créé justement pour éviter les écueils du type float.
Pour plus d'informations, n'étant pas moi-même spécifiquement un développeur python, je t'invite à lire la documentation : https://docs.python.org/fr/2/library/decimal.html
Xavier
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Nico_63
Messages postés
41
Date d'inscription
dimanche 3 novembre 2013
Statut
Membre
Dernière intervention
27 mai 2023
4 févr. 2019 à 10:26
4 févr. 2019 à 10:26
Merci à tous pour vos réponses complémentaires et éclairantes (en particulier Dalfab).
Je note l'utilité du module décimal qui permet d'éviter ces erreurs.
Deux questions complémentaires cependant:
j'avais exécuté le premier exemple du tuto Python suivant (très bon site au passage pour se dégrossir en programmation Python quand on ne connaît absolument pas ce langage comme moi):
http://python.lycee.free.fr/exemples.html
_ Pourquoi le problème n'apparaît pas sur l'exemple alors qu'il n'utilise pas le type décimal ? (Reivax962)
_ Pourquoi le problème chez moi n'apparaît-il qu'à partir de 2.3 et non de 2.1 ? (Dalfab)
Merci encore
Nicolas
Je note l'utilité du module décimal qui permet d'éviter ces erreurs.
Deux questions complémentaires cependant:
j'avais exécuté le premier exemple du tuto Python suivant (très bon site au passage pour se dégrossir en programmation Python quand on ne connaît absolument pas ce langage comme moi):
http://python.lycee.free.fr/exemples.html
_ Pourquoi le problème n'apparaît pas sur l'exemple alors qu'il n'utilise pas le type décimal ? (Reivax962)
_ Pourquoi le problème chez moi n'apparaît-il qu'à partir de 2.3 et non de 2.1 ? (Dalfab)
Merci encore
Nicolas
3 févr. 2019 à 13:32