Re: Y a comme un défaut

Liste des GroupesRevenir à fcsm programmation 
Sujet : Re: Y a comme un défaut
De : pehache.7 (at) *nospam* gmail.com (pehache)
Groupes : fr.comp.sys.mac.programmation
Date : 04. Dec 2021, 14:46:15
Autres entêtes
Message-ID : <j1168nF58rjU1@mid.individual.net>
References : 1 2 3
User-Agent : Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Thunderbird/78.10.1
Le 04/12/2021 à 10:14, Joseph-B a écrit :
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
Il n'est pas dérangeant à partir du moment où on a conscience de ce qui se passe à bas niveau en machine pour les calculs sur des flottants, et qu'on en tient compte quand on écrit du code.
Le truc classique c'est (1+1e-16)-1 dont le résultat est zéro exactement, parce que la représentation d'un flottant 64 bits ne peut pas différencier (1+1e-16) de 1

 Là où il n'est plus soutenable c'est pour (254 mod 2.54) ==> 2.54
Si, car comme l'a expliqué OM c'est exactement le même problème. Suivant que le résultat de la division flottante tombe juste au-dessus ou juste au-dessous de la valeur entière à cause des approximations inhérentes au calculs en précision limitée, ça va changer le résultat du tout au tout.
Quand tu écris 254/2.54, ce qui se passe en machine c'est
(254+eps1)/(2.54+eps2)
En première approximation (mathématique celle-là) ça donne
100 + (eps1-100*eps2)/2.54
Suivant les valeurs de eps1 et eps2 (qui peuvent être >0 ou <0) le résultat peut être juste supérieur ou juste inférieur à 100, et de façon non prédictible (*). Donc en prenant la partie entière ça va donner 100 ou 99. Si c'est un problème il faut que tu écrives ton code différemment.
(*) mais quand même reproductible :)... Du moins tant qu'on ne change pas de machine.

 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 !!
Je ne suis pas certain qu'il existe une telle fonction câblée en hardware dans le processeur pour les flottants. Elle doit être logicielle.

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
 
Dans ce cas utilise cette fonction écrite par tes soins si tu estimes qu'elle se comporte mieux que la fonction proposée par le langage. Ceci étant ça reste de l'arithmétique flottante, et *rien* ne peut garantir que le résultat sera *toujours* conforme à ce que tu attends.
Comme l'a dit OM la seule façon de garantir le résultat que tu attends est de passer en arithmétique entière.
--
"...[la moto] un engin qui par les lois de la physique ne peut pas
freiner en courbe.", SLD sur fr.rec.bricolage
"...sois ouvert aux idées des autres pour peu qu'elles aillent dans le
même sens que les tiennes.", ST sur fr.bio.medecine

Date Sujet#  Auteur
4 Dec 21 * Y a comme un défaut31Joseph-B
4 Dec 21 +* Re: Y a comme un défaut17pehache
4 Dec 21 i`* Re: Y a comme un défaut16Joseph-B
4 Dec 21 i +* Re: Y a comme un défaut4Olivier Miakinen
4 Dec 21 i i`* Re: Y a comme un défaut3Joseph-B
4 Dec 21 i i `* Re: Y a comme un défaut2Olivier Miakinen
4 Dec 21 i i  `- Calculette IEEE754 (was: Y a comme un défaut)1Olivier Miakinen
4 Dec 21 i +* Re: Y a comme un défaut10pehache
4 Dec 21 i i`* Re: Y a comme un défaut9Joseph-B
4 Dec 21 i i +* Re: Y a comme un défaut3M.V.
4 Dec 21 i i i`* Re: Y a comme un défaut2Joseph-B
4 Dec 21 i i i `- Re: Y a comme un défaut1M.V.
4 Dec 21 i i +- Re: Y a comme un défaut1Benoit
4 Dec 21 i i `* Re: Y a comme un défaut4pehache
4 Dec 21 i i  `* Re: Y a comme un défaut3Joseph-B
4 Dec 21 i i   +- Re: Y a comme un défaut1pehache
5 Dec 21 i i   `- Re: Y a comme un défaut1JPP
5 Dec 21 i `- Re: Y a comme un défaut1Julien Salort
4 Dec 21 +* Re: Y a comme un défaut11Fleuger
4 Dec 21 i+* Re: Y a comme un défaut4Fleuger
4 Dec 21 ii`* Re: Y a comme un défaut3M.V.
4 Dec 21 ii `* Re: Y a comme un défaut2Fleuger
4 Dec 21 ii  `- Re: Y a comme un défaut1M.V.
4 Dec 21 i`* Re: Y a comme un défaut6Joseph-B
4 Dec 21 i +* Re: Y a comme un défaut4M.V.
4 Dec 21 i i`* Re: Y a comme un défaut3Joseph-B
4 Dec 21 i i +- Re: Y a comme un défaut1pehache
4 Dec 21 i i `- Re: Y a comme un défaut1M.V.
4 Dec 21 i `- Re: Y a comme un défaut1M.V.
4 Dec 21 +- Re: Y a comme un défaut1M.V.
4 Dec 21 `- Re: Y a comme un défaut1JPP

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal