Comment Python peut-il se tromper sur un calcul aussi simple ?

serge_rouvez Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
serge_rouvez Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -
Bonsoir à tous,

Je m'appelle Serge, je suis enseignant et je débute dans la programmation. On m'a conseillé le langage Python, et le livre de Gérard Swinnen pour débuter. Soit dit en passant, c'est super : très pédago, très progressif, et le langage ne me surprend pas.
Par contre, j'ai été surpris par un résultat à un exercice. La machine se trompait dans une multiplication. Ceci m'a conduit à faire un test extrèmement simple, et le résultat me surprend beaucoup. Je vous laisse admirer cette copie d'écran : Comment Python peut-il se tromper sur un calcul aussi simple ? Je me suis dit que c'était un problème lié à la version de Python la plus récente, mais j'ai obtenu le même résultat avec un IDLE exploitant Python 2.7.8.
Pour info, mon ordinateur utilise un processeur 64 bits AMD FX(tm)-4100 Quad-Core Processor × 4 et tourne sous ubuntu 14.10.
A voir également:

3 réponses

NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Une erreur classique avec les flottants, c'est un problème de précision.
2
serge_rouvez Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Ah oui, en effet : on m'a indiqué via Facebook un lien qui répond. https://docs.python.org/2/tutorial/floatingpoint.html Merci ! :)
0
Utilisateur anonyme
 
Bonjour,

je ne connais pas trop Python mais je viens d'essayer avec PHP

echo 3 * 1.65;

donne 4.95

par contre en lui demandant le resultat avec 50 décimales

echo number_format (1.65*3, 50);

donne 4.94999999999999928945726423989981412887573242187500

Avec 15 décimales

echo number_format (1.65*3, 15);

donne 4.949999999999999

Le problème que tu soulèves n'est donc pas réservé à Python. Du coup je suis ton post avec interêt !

Cdt
En informatique 99% des problèmes se situent entre le fauteuil et le clavier
0
JwTdd
 
Salut, essayer d'écrire 1.65 en binaire c'est comme essayer 1/3 en décimale, il faut tronquer ou s'appeler Chuck Norris, quoique celui qui trouve la solution au premier problème du prix millénaire pourrais trouver une façon d'écrire n'importe quel nombre rationnel sans tronquer (en retrouvant la fraction correspondante en un temps record), mais celui-ci serait trop occupé a casser les chiffrements basé sur la difficulté de factorisation.
0