Path: ...!weretis.net!feeder6.news.weretis.net!feeder8.news.weretis.net!news.trigofacile.com!news.gegeweb.eu!gegeweb.org!.POSTED.2a01:cb14:62c:1d00:135:287a:7195:daf7!not-for-mail From: Julien Salort Newsgroups: fr.comp.sys.mac.programmation Subject: =?UTF-8?Q?Re=3a_Y_a_comme_un_d=c3=a9faut?= Date: Sun, 5 Dec 2021 09:51:55 +0100 Organization: Gegeweb News Server Message-ID: References: <1pjmz6k.1v0nod6mfq0rkN%josephb@nowhere.invalid> <1pjnmh9.11fmmgjvnnxyuN%josephb@nowhere.invalid> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Sun, 5 Dec 2021 08:51:55 -0000 (UTC) Injection-Info: news.gegeweb.eu; posting-account="jsalort@usenet.local"; posting-host="2a01:cb14:62c:1d00:135:287a:7195:daf7"; logging-data="7416"; mail-complaints-to="abuse@gegeweb.eu" User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.3.2 Content-Language: fr In-Reply-To: <1pjnmh9.11fmmgjvnnxyuN%josephb@nowhere.invalid> Cancel-Lock: sha256:Yb3QQIO5hl3/hppCpFDvvxpZcGsW2Gl05pSBIYsrYrU= Bytes: 2689 Lines: 31 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.