Sujet : Re: Autre exercice : calculer la somme de x chiffres.
De : alain (at) *nospam* universite-de-strasbourg.fr.invalid (Alain Ketterlin)
Groupes : fr.comp.lang.pythonDate : 25. May 2022, 12:41:45
Autres entêtes
Organisation : Université de Strasbourg
Message-ID : <87r14hyh3a.fsf@universite-de-strasbourg.fr.invalid>
References : 1 2 3 4 5 6 7
User-Agent : Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)
Benoit Izac <
use.reply.to@INVALID.ADDRESS> writes:
(Ç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 ?
Oui, parce que dans ce cas le milieu de 3 et 5 est 3 (3//2 == 1 et 5//2
= 2), ce qui n'est pas utile dans les algos dichotomiques.
(Si tu penses à la division flottante, alors tu as un problème encore
plus grave, puisqu'on a alors en général seulement 53 bits de précision
-- pour les double IEEE 754. Sans compter les blagues du genre
0.1+0.1+0.1 != 0.3)
Et pour ma culture, il vient d'où ce bug ?
Voici ce que j'ai trouvé de plus ancien sur le bug dans la bibliothèque
standard de Java :
https://ai.googleblog.com/2006/06/extra-extra-read-all-about-it-nearly.html-- Alain.