Sujet : Re: Y a comme un défaut
De : josephb (at) *nospam* nowhere.invalid (Joseph-B)
Groupes : fr.comp.sys.mac.programmationDate : 04. Dec 2021, 11:14:56
Autres entêtes
Organisation : Aucune
Message-ID : <1pjnmh9.11fmmgjvnnxyuN%josephb@nowhere.invalid>
References : 1 2
User-Agent : MacSOUP/F-2.8.4 (6da4d6e6d0) (Mac OS X version 10.11.6 (x86))
pehache <
pehache.7@gmail.com> wrote:
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
Si le copro-arithmétique du Mac n'a pas été écrit pour retourner la
valeur correcte (± epsilon d'après ton argument) de la FONCTION "RESTE"
d'une divison, il y a un GROS SOUCI !!
Pour preuve, toujours dans l'éditeur de script si j'essaie cette fois en
javascript
254 % 2.54 ==> 2.5399999999999965
ou
7412 % 74.12 ==> 74.11999999999955
résultats totalement inacceptables, et je ne me satisfais pas vraiment
que
7412 % 7.412 ==> 7.815970093361102e-14
tende vers zéro
d'ailleurs, voici en dessous une fonction Modulo() écrite en
AppleScript, qui fort heureusement retourne "ZÉRO" comme reste de (par
exemple…)
254 par 2.54 ou
789452.18 par 789.45218
ou toutes autres valeurs du domaine de précison du copro.
on Modulo(dividende, diviseur)
set partieEntiere to (dividende div diviseur)
set reste to (dividende - (partieEntiere * diviseur))
return reste
end Modulo
-- J. B.