Sujet : Re: Y a comme un défaut
De : listes (at) *nospam* salort.eu (Julien Salort)
Groupes : fr.comp.sys.mac.programmationDate : 05. Dec 2021, 10:51:55
Autres entêtes
Organisation : Gegeweb News Server
Message-ID : <sohujb$77o$1@news.gegeweb.eu>
References : 1 2 3
User-Agent : Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.3.2
Le 04/12/2021 à 10:14, Joseph-B a écrit :
Il n'y a pas forcément de défaut, calculer des restes en arithmétique
flottante est forcément casse-gueule quand le résultat de la division
est censé être une valeur entière. Quand tu écris "2,54" (ou n'importe
quelle autre valeur) la représentation en machine est une approximation
de cette valeur, ce n'est pas la valeur exacte (sauf coup de chance).
Ton argument serait recevable, encore que très dérangeant dans les
calculs pratiques, pour (254 mod 25.4) ==> 1.4210854715202E-14
Là où il n'est plus soutenable c'est pour (254 mod 2.54) ==> 2.54
C'est un problème de IEEE-754.
On le voit par exemple en Python, si on compare le résultat entre le calcul avec des flottants natifs, ou avec des décimaux:
% python
Python 3.10.0 (default, Nov 12 2021, 18:16:44) [Clang 13.0.0 (clang-1300.0.29.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 254 % 2.54
2.5399999999999965
>>> from decimal import Decimal
>>> Decimal("254") % Decimal("2.54")
Decimal('0.00')
Bien sûr, les décimaux peuvent avoir le même genre de problèmes. Mais la différence c'est que les nombres qui s'écrivent exactement en décimal seront représentés exactement. Pour les flottants, il faut que la représentation en base 2 soit exacte.