Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Multiplication no correcte

6 réponses
Avatar
888.marc
Bonjour,

Depuis la ligne de commande de Python25 je saisis:
>>> 29.7*3
R=E9sultat:
89.099999999999994 .... au lieu de 89.1

Quelqu'un peut-il m'expliquer pourquoi la multiplication n'est pas
juste?
Merci

6 réponses

Avatar
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.
Avatar
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
Avatar
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.
Avatar
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.
Avatar
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
Avatar
888.marc
Merci Bruno Piguet et Michel Claveau pour vos explications
rassurantes :-)

Marc