Outils pour utilisateurs

Outils du site


issue79:tutoriel_-_python_49

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue79:tutoriel_-_python_49 [2014/03/29 15:25] – [1] auntieeissue79:tutoriel_-_python_49 [2014/03/29 17:57] (Version actuelle) – [8] auntiee
Ligne 37: Ligne 37:
              2.2+3.3              2.2+3.3
  
-5.5 Maintenant, vous êtes encore plus confus et vous vous dites : « D'accord. Il s'agit soit d'un bug soit d'une sorte d’œuf de Pâques [Ndt : blague informatique] ». Non, ce n'est ni un bug ni un œuf de Pâques. C'est réel. Même si je connaissais ce phénomène il y a très longtemps, il avait glissé dans les profondeurs et les recoins les plus sombres de mon vieil esprit, et il a fallu que je le fasse remonter. Ce que nous voyons là est la joie des nombres binaires à virgule flottante.+5.5 Maintenant, vous êtes encore plus confus et vous vous dites : « D'accord. Il s'agit soit d'un bug soit d'une sorte d’œuf de Pâques [Ndt : blague informatique] ». Non, ce n'est ni un bug ni un œuf de Pâques. C'est réel. Même si je connaissais ce phénomène il y a très longtemps, il avait glissé dans les profondeurs et les recoins les plus sombres de mon vieux cerveau et il a fallu que je le fasse remonter. Ce que nous voyons là est la joie des nombres binaires à virgule flottante.
  
 ====== 3 ====== ====== 3 ======
Ligne 88: Ligne 88:
 So what do we do about it? Well, the quick answer is that you probably can live with it for 90% of the things we have to do out there in the real world – by using the round() method. While you have to decide on the number of decimal points that you must have in your world to carry the precision that you need, for the most part, this will be an acceptable workaround.** So what do we do about it? Well, the quick answer is that you probably can live with it for 90% of the things we have to do out there in the real world – by using the round() method. While you have to decide on the number of decimal points that you must have in your world to carry the precision that you need, for the most part, this will be an acceptable workaround.**
  
-C'est ce qu'on appelle l'erreur de représentation, elle existe dans presque tous les langages de programmation moderne (Python, C, C++, Java, Fortran et d'autres)et sur ​​presque tous les ordinateurs modernes. C'est parce que ces machines utilisent l'arithmétique en virgule flottante IEEE-754 qui (sur la plupart des machines et des système d'exploitation) correspond à un nombre en double précision IEEE-754. Ce nombre en double précision a une précision de 53 bits. Ainsi, notre 0.1, quand il est représenté en 53-bit double précision, se transforme en : 0.00011001100110011001100110011001100110011001100110011010 C'est proche de 0.1 mais pas assez proche pour éviter les problèmes.+C'est ce qu'on appelle une Erreur de représentation, elle existe dans presque tous les langages de programmation moderne (Python, C, C++, Java, Fortran et d'autres) et sur ​​presque tous les ordinateurs modernes. C'est parce que ces machines utilisent l'arithmétique en virgule flottante IEEE-754 qui (sur la plupart des machines et des systèmes d'exploitation) correspond à un nombre en double précision IEEE-754. Ce nombre en double précision a une précision de 53 bits. Ainsi, notre 0.1, quand il est représenté en 53-bit double précision, se transforme en : 0.00011001100110011001100110011001100110011001100110011010 C'est proche de 0.1 mais pas assez proche pour éviter les problèmes.
  
-Alors, que faisons-nous avec ça ? Eh bien, la réponse rapide est que vous pouvez probablement vivre avec dans 90% des cas que nous avons à traiter dans le monde réel - en utilisant la méthode round(). Vous devrez décider le nombre de décimales dont vous avez besoin dans votre monde pour avoir la précision dont vous avez besoin, mais pour la plupart ce sera une solution acceptable.+Alors, que faisons-nous avec ça ? Eh bien, la réponse rapide est que vous pouvez probablement vivre avec dans 90% des cas que nous avons à traiter dans le monde réel - en utilisant la méthode round(). Vous devrez décider le nombre de décimales dont vous avez besoin dans votre monde pour avoir la précision dont vous avez besoin, mais la plupart du temps ce sera une solution acceptable.
  
 ====== 6 ====== ====== 6 ======
Ligne 137: Ligne 137:
             round(2.675,2)             round(2.675,2)
  
-2.67 Cela pourrait poser un problème. Et on revient à la question initiale dont nous parlions. Avec la conversion  en un nombre binaire à virgule flottante de 53 bits de long, le nombre devient : 2,6749999999999998223653160599749535221893310546875 qui est arrondi à 2.67. +2.67 Cela pourrait poser un problème. Et on revient à la question initiale dont nous parlions. Avec la conversion en un nombre binaire à virgule flottante de 53 bits de long, le nombre devient : 2,6749999999999998223653160599749535221893310546875 qui est arrondi à 2.67. 
  
 L'essentiel ici est qu'en essayant de comparer les nombres à virgule flottante, il faut être conscient que certaines choses ne se traduisent pas bien. L'essentiel ici est qu'en essayant de comparer les nombres à virgule flottante, il faut être conscient que certaines choses ne se traduisent pas bien.
issue79/tutoriel_-_python_49.1396103115.txt.gz · Dernière modification : 2014/03/29 15:25 de auntiee