Re: Autre exercice : calculer la somme de x chiffres.

Liste des GroupesRevenir à fcl python 
Sujet : Re: Autre exercice : calculer la somme de x chiffres.
De : nicolasp (at) *nospam* aaton.com (Nicolas)
Groupes : fr.comp.lang.python
Date : 25. May 2022, 08:51:02
Autres entêtes
Organisation : Guest of ProXad - France
Message-ID : <628dd1d5$0$2996$426a74cc@news.free.fr>
References : 1 2 3 4 5 6 7
User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.9.1
Bonjour,
Le 24/05/2022 à 20:50, Benoit Izac a écrit :
Bonjour,
 Le 24/05/2022 à 14:33, Alain Ketterlin a écrit dans le message
<87zgj7xg89.fsf@universite-de-strasbourg.fr.invalid> :
 
(Ça ne concerne pas Python, mais c'est la même idée qu'un bug qui a été
célèbre en Java, dont la correction a consisté à remplacer (a+b)/2 par
a + (b-a)/2.)
 Il y a intérêt a avoir un beau commentaire juste à côté car il y a fort
à parier que quelqu'un qui passe sur le code sans être courant risque de
simplifier (et c'est logique).
 Question bête : si c'est (a+b) qui provoque le dépassement, pourquoi pas
« a/2 + b/2 » ? Perte de précision ?
Tout à fait.
Avec des calculs sur des entiers :
(5 + 7) // 2 = 12 // 2 = 6
(5//2) + (7//2) = 2 + 3 = 5
Note : J'ai mis la notation Python pour du calcul sur les entiers, pas la notation mathématique (qui ne se différencie pas de la notation des calculs sur les réels).

 Et pour ma culture, il vient d'où ce bug ?
 
Ce "bug" n'existe pas avec les versions de Python qui font du calcul sur des entiers de taille indéfinie.
Il ne s'agit en fait pas d'un bug au sens que l'on donne à ce terme habituellement mais du fonctionnement des processeurs depuis l'origine de leur création.
Pour simplifier, disons que nous utilisons un processeur 8 bits. Les nombres manipulés par ce processeur, avec des entiers positifs, vont de 0 à (2**8)-1.
En binaire : 00000000 à 11111111
En décimal : 0 à 255
Soit une variable V qui contient la valeur 240 (11110000 en binaire).
Ajoutons la valeur 16 :
V = V + 20
En binaire, cela donne :
   11110000
+ 00010100
----------
  100000100
Le résultat est sur 9 bits. Comme le processeur ne sait manipuler que des nombres sur 8 bits, le résultat est tronqué à 8 bits ce qui donne 4.
Pour reprendre le problème d'origine (avec des nombres sur 8 bits) :
(130 + 200) / 2 = 300 /2 -> 44 / 2 = 22 ==> !!! BUG !!!
130 + (200-130) / 2 = 130 + 70 / 2 = 165 ==> OK
Les processeurs actuels manipulent des nombres sur 32 bits ou 64 bits (voire plus) ce qui permet une plus grande latitude d'utilisation mais le phénomène de troncature est toujours présent.
J'espère avoir été clair dans mes explications ;)
Bonne journée,
Nicolas

Date Sujet#  Auteur
22 May 22 * Autre exercice : calculer la somme de x chiffres.19Dominique
22 May 22 `* Re: Autre exercice : calculer la somme de x chiffres.18Dominique
23 May 22  +* Re: Autre exercice : calculer la somme de x chiffres.2Damien Wyart
23 May 22  i`- Re: Autre exercice : calculer la somme de x chiffres.1Dominique
23 May 22  `* Re: Autre exercice : calculer la somme de x chiffres.15Benoit Izac
23 May 22   `* Re: Autre exercice : calculer la somme de x chiffres.14Alain Ketterlin
23 May 22    +* Re: Autre exercice : calculer la somme de x chiffres.12Benoit Izac
23 May 22    i+- Re: Autre exercice : calculer la somme de x chiffres.1Dominique
24 May 22    i`* Re: Autre exercice : calculer la somme de x chiffres.10Alain Ketterlin
24 May 22    i +* Re: Autre exercice : calculer la somme de x chiffres.7Benoit Izac
25 May 22    i i+* Re: Autre exercice : calculer la somme de x chiffres.3Nicolas
25 May 22    i ii`* Re: Autre exercice : calculer la somme de x chiffres.2Benoit Izac
25 May 22    i ii `- Re: Autre exercice : calculer la somme de x chiffres.1Nicolas
25 May 22    i i`* Re: Autre exercice : calculer la somme de x chiffres.3Alain Ketterlin
25 May 22    i i `* Re: Autre exercice : calculer la somme de x chiffres.2Benoit Izac
25 May 22    i i  `- Re: Autre exercice : calculer la somme de x chiffres.1Alain Ketterlin
25 May 22    i `* Re: Autre exercice : calculer la somme de x chiffres.2Olivier Miakinen
25 May 22    i  `- Re: Autre exercice : calculer la somme de x chiffres.1Alain Ketterlin
23 May 22    `- Re: Autre exercice : calculer la somme de x chiffres.1Dominique

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal