Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Bruno Piguet
a écrit :
Bonjour,
Depuis la ligne de commande de Python25 je saisis:
29.7*3
Résultat: 89.099999999999994 .... au lieu de 89.1
Quelqu'un peut-il m'expliquer pourquoi la multiplication n'est pas juste?
Je ne peux pas. Tout simplement parce que cette multiplication est parfaitement juste ... dans le cadre de l'arithmétique en virgule flottante, qui est celle de nos microprocesseurs, et donc celle qu'on retrouve par défaut dans les langages de programmation. La solution à votre question est donc, soit dans un arrondi, soit dans l'utilisation de bibliothèques de calcul en précision arbitraire.
Un point de départ pour les explications : http://wikipython.flibuste.net/CalculerJuste
De façon plus générale, l'arithmétique a virgule flottante est un domaine étrange, où l'on manipule des choses qui *ressemblent* aux nombres que l'on a croisé en math depuis le primaire... mais qui n'en ont pas toutes les propriété usuelles. Pour creuser, une simple recherche google donne : http://perso.ens-lyon.fr/jean-michel.muller/CoursVF-4p.pdf et, en plus dense : hal.archives-ouvertes.fr/docs/00/07/14/77/PDF/RR-5105.pdf ou http://www.ens-lyon.fr/LIP/Pub/Rapports/PhD/PhD2004/PhD2004-05.pdf
Bon courage.
Bruno.
888.marc@gmail.com a écrit :
Bonjour,
Depuis la ligne de commande de Python25 je saisis:
29.7*3
Résultat:
89.099999999999994 .... au lieu de 89.1
Quelqu'un peut-il m'expliquer pourquoi la multiplication n'est pas
juste?
Je ne peux pas.
Tout simplement parce que cette multiplication est parfaitement juste
... dans le cadre de l'arithmétique en virgule flottante, qui est celle
de nos microprocesseurs, et donc celle qu'on retrouve par défaut dans
les langages de programmation.
La solution à votre question est donc, soit dans un arrondi, soit
dans l'utilisation de bibliothèques de calcul en précision arbitraire.
Un point de départ pour les explications :
http://wikipython.flibuste.net/CalculerJuste
De façon plus générale, l'arithmétique a virgule flottante est un
domaine étrange, où l'on manipule des choses qui *ressemblent* aux
nombres que l'on a croisé en math depuis le primaire... mais qui n'en
ont pas toutes les propriété usuelles.
Pour creuser, une simple recherche google donne :
http://perso.ens-lyon.fr/jean-michel.muller/CoursVF-4p.pdf
et, en plus dense :
hal.archives-ouvertes.fr/docs/00/07/14/77/PDF/RR-5105.pdf
ou
http://www.ens-lyon.fr/LIP/Pub/Rapports/PhD/PhD2004/PhD2004-05.pdf
Depuis la ligne de commande de Python25 je saisis:
29.7*3
Résultat: 89.099999999999994 .... au lieu de 89.1
Quelqu'un peut-il m'expliquer pourquoi la multiplication n'est pas juste?
Je ne peux pas. Tout simplement parce que cette multiplication est parfaitement juste ... dans le cadre de l'arithmétique en virgule flottante, qui est celle de nos microprocesseurs, et donc celle qu'on retrouve par défaut dans les langages de programmation. La solution à votre question est donc, soit dans un arrondi, soit dans l'utilisation de bibliothèques de calcul en précision arbitraire.
Un point de départ pour les explications : http://wikipython.flibuste.net/CalculerJuste
De façon plus générale, l'arithmétique a virgule flottante est un domaine étrange, où l'on manipule des choses qui *ressemblent* aux nombres que l'on a croisé en math depuis le primaire... mais qui n'en ont pas toutes les propriété usuelles. Pour creuser, une simple recherche google donne : http://perso.ens-lyon.fr/jean-michel.muller/CoursVF-4p.pdf et, en plus dense : hal.archives-ouvertes.fr/docs/00/07/14/77/PDF/RR-5105.pdf ou http://www.ens-lyon.fr/LIP/Pub/Rapports/PhD/PhD2004/PhD2004-05.pdf
Bon courage.
Bruno.
Méta-MCI \(MVP\)
Bonjour !
Ce comportement est conforme à la norme IEEE-754, qui décrit l'utilisation des nombres en virgule flottante dans les ordinateurs. Voir : http://fr.wikipedia.org/wiki/Nombre_flottant
Néanmoins, je signale qu'il existe, dans Python, une alternative. Voir le module "decimal", dans l'aide/la doc. (en ligne : http://docs.python.org/library/decimal.html).
Et aussi, pour Bruno Piguet, les microprocesseurs intègrent tous une autre arithmétique, le Décimal-Codé-Binaire (DCB), qui n'a pas ces problèmes d'arrondis. Malheureusement, le lobbying hégémonique des scientifiques, relativement aux comptables, a rendu son utilisation marginale.
@-salutations
Michel Claveau
Bonjour !
Ce comportement est conforme à la norme IEEE-754, qui décrit
l'utilisation des nombres en virgule flottante dans les ordinateurs.
Voir : http://fr.wikipedia.org/wiki/Nombre_flottant
Néanmoins, je signale qu'il existe, dans Python, une alternative. Voir
le module "decimal", dans l'aide/la doc.
(en ligne : http://docs.python.org/library/decimal.html).
Et aussi, pour Bruno Piguet, les microprocesseurs intègrent tous une
autre arithmétique, le Décimal-Codé-Binaire (DCB), qui n'a pas ces
problèmes d'arrondis. Malheureusement, le lobbying hégémonique des
scientifiques, relativement aux comptables, a rendu son utilisation
marginale.
Ce comportement est conforme à la norme IEEE-754, qui décrit l'utilisation des nombres en virgule flottante dans les ordinateurs. Voir : http://fr.wikipedia.org/wiki/Nombre_flottant
Néanmoins, je signale qu'il existe, dans Python, une alternative. Voir le module "decimal", dans l'aide/la doc. (en ligne : http://docs.python.org/library/decimal.html).
Et aussi, pour Bruno Piguet, les microprocesseurs intègrent tous une autre arithmétique, le Décimal-Codé-Binaire (DCB), qui n'a pas ces problèmes d'arrondis. Malheureusement, le lobbying hégémonique des scientifiques, relativement aux comptables, a rendu son utilisation marginale.
@-salutations
Michel Claveau
Bruno Piguet
Méta-MCI (MVP) a écrit :
Et aussi, pour Bruno Piguet, les microprocesseurs intègrent tous une autre arithmétique, le Décimal-Codé-Binaire (DCB), qui n'a pas ces problèmes d'arrondis. Malheureusement, le lobbying hégémonique des scientifiques, relativement aux comptables, a rendu son utilisation marginale.
Il est vrai que, trempant plutôt dans le premier monde que dans le second, j'avais oublié le DCB. Mais je ne crois pas qu'il faille opposer binairement le DCB et la virgule flottante : William Kahan, le père de la norme IEEE754, travaillait chez HP, et, si je me souviens bien (25 ans, déjà), les calculatrices HP (au moins la 15 et la 41) stockaient leurs nombres sous la forme mantisse+exposant, mais en base 10, avec les chiffres codés en BCD.
Bruno.
Méta-MCI (MVP) a écrit :
Et aussi, pour Bruno Piguet, les microprocesseurs intègrent tous une
autre arithmétique, le Décimal-Codé-Binaire (DCB), qui n'a pas ces
problèmes d'arrondis. Malheureusement, le lobbying hégémonique des
scientifiques, relativement aux comptables, a rendu son utilisation
marginale.
Il est vrai que, trempant plutôt dans le premier monde que dans le
second, j'avais oublié le DCB.
Mais je ne crois pas qu'il faille opposer binairement le DCB et la
virgule flottante : William Kahan, le père de la norme IEEE754,
travaillait chez HP, et, si je me souviens bien (25 ans, déjà), les
calculatrices HP (au moins la 15 et la 41) stockaient leurs nombres sous
la forme mantisse+exposant, mais en base 10, avec les chiffres codés en BCD.
Et aussi, pour Bruno Piguet, les microprocesseurs intègrent tous une autre arithmétique, le Décimal-Codé-Binaire (DCB), qui n'a pas ces problèmes d'arrondis. Malheureusement, le lobbying hégémonique des scientifiques, relativement aux comptables, a rendu son utilisation marginale.
Il est vrai que, trempant plutôt dans le premier monde que dans le second, j'avais oublié le DCB. Mais je ne crois pas qu'il faille opposer binairement le DCB et la virgule flottante : William Kahan, le père de la norme IEEE754, travaillait chez HP, et, si je me souviens bien (25 ans, déjà), les calculatrices HP (au moins la 15 et la 41) stockaient leurs nombres sous la forme mantisse+exposant, mais en base 10, avec les chiffres codés en BCD.
Bruno.
Bruno Piguet
Méta-MCI (MVP) a écrit :
Et aussi, pour Bruno Piguet, les microprocesseurs intègrent tous une autre arithmétique, le Décimal-Codé-Binaire (DCB), qui n'a pas ces problèmes d'arrondis. Malheureusement, le lobbying hégémonique des scientifiques, relativement aux comptables, a rendu son utilisation marginale.
Il est vrai que, trempant plutôt dans le premier monde que dans le second, j'avais oublié le DCB. Mais je ne crois pas qu'il faille opposer binairement le DCB et la virgule flottante : William Kahan, le père de la norme IEEE754, travaillait chez HP, et, si je me souviens bien (25 ans, déjà), les calculatrices HP (au moins la 15 et la 41) stockaient leurs nombres sous la forme mantisse+exposant, mais en base 10, avec les chiffres codés en BCD.
Bruno.
Méta-MCI (MVP) a écrit :
Et aussi, pour Bruno Piguet, les microprocesseurs intègrent tous une
autre arithmétique, le Décimal-Codé-Binaire (DCB), qui n'a pas ces
problèmes d'arrondis. Malheureusement, le lobbying hégémonique des
scientifiques, relativement aux comptables, a rendu son utilisation
marginale.
Il est vrai que, trempant plutôt dans le premier monde que dans le
second, j'avais oublié le DCB.
Mais je ne crois pas qu'il faille opposer binairement le DCB et la
virgule flottante : William Kahan, le père de la norme IEEE754,
travaillait chez HP, et, si je me souviens bien (25 ans, déjà), les
calculatrices HP (au moins la 15 et la 41) stockaient leurs nombres sous
la forme mantisse+exposant, mais en base 10, avec les chiffres codés en BCD.
Et aussi, pour Bruno Piguet, les microprocesseurs intègrent tous une autre arithmétique, le Décimal-Codé-Binaire (DCB), qui n'a pas ces problèmes d'arrondis. Malheureusement, le lobbying hégémonique des scientifiques, relativement aux comptables, a rendu son utilisation marginale.
Il est vrai que, trempant plutôt dans le premier monde que dans le second, j'avais oublié le DCB. Mais je ne crois pas qu'il faille opposer binairement le DCB et la virgule flottante : William Kahan, le père de la norme IEEE754, travaillait chez HP, et, si je me souviens bien (25 ans, déjà), les calculatrices HP (au moins la 15 et la 41) stockaient leurs nombres sous la forme mantisse+exposant, mais en base 10, avec les chiffres codés en BCD.
Bruno.
Méta-MCI \(MVP\)
'soir !
La meilleure preuve que le DCB (BCD en anglais) aurait dû être prioritaire, c'est que, chez ceux qui ont fait différemment, cela provoque des tremblements, et des émissions de messages en double...
;o)
-- Michel Claveau
'soir !
La meilleure preuve que le DCB (BCD en anglais) aurait dû être
prioritaire, c'est que, chez ceux qui ont fait différemment, cela
provoque des tremblements, et des émissions de messages en double...
La meilleure preuve que le DCB (BCD en anglais) aurait dû être prioritaire, c'est que, chez ceux qui ont fait différemment, cela provoque des tremblements, et des émissions de messages en double...
;o)
-- Michel Claveau
888.marc
Merci Bruno Piguet et Michel Claveau pour vos explications rassurantes :-)
Marc
Merci Bruno Piguet et Michel Claveau pour vos explications
rassurantes :-)