Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > fr.comp.sys.mac.programmation > #2095
| From | pehache <pehache.7@gmail.com> |
|---|---|
| Newsgroups | fr.comp.sys.mac.programmation |
| Subject | Re: Y a comme un défaut |
| Date | 2021-12-04 13:46 +0100 |
| Message-ID | <j1168nF58rjU1@mid.individual.net> (permalink) |
| References | <1pjmz6k.1v0nod6mfq0rkN%josephb@nowhere.invalid> <j0vto8FsgsuU1@mid.individual.net> <1pjnmh9.11fmmgjvnnxyuN%josephb@nowhere.invalid> |
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
Back to fr.comp.sys.mac.programmation | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Y a comme un défaut josephb@nowhere.invalid (Joseph-B) - 2021-12-04 00:54 +0100
Re: Y a comme un défaut pehache <pehache.7@gmail.com> - 2021-12-04 02:14 +0100
Re: Y a comme un défaut josephb@nowhere.invalid (Joseph-B) - 2021-12-04 10:14 +0100
Re: Y a comme un défaut Olivier Miakinen <om+news@miakinen.net> - 2021-12-04 12:48 +0100
Re: Y a comme un défaut josephb@nowhere.invalid (Joseph-B) - 2021-12-04 13:16 +0100
Re: Y a comme un défaut Olivier Miakinen <om+news@miakinen.net> - 2021-12-04 13:23 +0100
Calculette IEEE754 (was: Y a comme un défaut) Olivier Miakinen <om+news@miakinen.net> - 2021-12-04 14:39 +0100
Re: Y a comme un défaut pehache <pehache.7@gmail.com> - 2021-12-04 13:46 +0100
Re: Y a comme un défaut josephb@nowhere.invalid (Joseph-B) - 2021-12-04 15:25 +0100
Re: Y a comme un défaut "M.V." <mv@gmail.com.invalid> - 2021-12-04 14:49 +0000
Re: Y a comme un défaut josephb@nowhere.invalid (Joseph-B) - 2021-12-04 19:21 +0100
Re: Y a comme un défaut "M.V." <mv@gmail.com.invalid> - 2021-12-04 18:58 +0000
Re: Y a comme un défaut Benoit <benoit@com.invalid> - 2021-12-04 16:35 +0000
Re: Y a comme un défaut pehache <pehache.7@gmail.com> - 2021-12-04 17:39 +0100
Re: Y a comme un défaut josephb@nowhere.invalid (Joseph-B) - 2021-12-04 19:21 +0100
Re: Y a comme un défaut pehache <pehache.7@gmail.com> - 2021-12-04 20:28 +0100
Re: Y a comme un défaut JPP <jpp@findelmundo.invalid> - 2021-12-05 03:24 -0300
Re: Y a comme un défaut Julien Salort <listes@salort.eu> - 2021-12-05 09:51 +0100
Re: Y a comme un défaut Fleuger <g4fleurot@free.fr.invalid> - 2021-12-04 08:27 +0000
Re: Y a comme un défaut Fleuger <g4fleurot@free.fr.invalid> - 2021-12-04 09:00 +0000
Re: Y a comme un défaut "M.V." <mv@gmail.com.invalid> - 2021-12-04 09:25 +0000
Re: Y a comme un défaut Fleuger <g4fleurot@free.fr.invalid> - 2021-12-04 13:01 +0000
Re: Y a comme un défaut "M.V." <mv@gmail.com.invalid> - 2021-12-04 14:27 +0000
Re: Y a comme un défaut josephb@nowhere.invalid (Joseph-B) - 2021-12-04 10:14 +0100
Re: Y a comme un défaut "M.V." <mv@gmail.com.invalid> - 2021-12-04 09:30 +0000
Re: Y a comme un défaut josephb@nowhere.invalid (Joseph-B) - 2021-12-04 12:57 +0100
Re: Y a comme un défaut pehache <pehache.7@gmail.com> - 2021-12-04 14:16 +0100
Re: Y a comme un défaut "M.V." <mv@gmail.com.invalid> - 2021-12-04 14:18 +0000
Re: Y a comme un défaut "M.V." <mv@gmail.com.invalid> - 2021-12-04 10:30 +0000
Re: Y a comme un défaut "M.V." <mv@gmail.com.invalid> - 2021-12-04 08:45 +0000
Re: Y a comme un défaut JPP <jpp@findelmundo.invalid> - 2021-12-04 14:16 -0300
Re: Y a comme un défaut "Néo, l'Élu" <neo-de-matrix@meta-science.fr> - 2022-02-07 10:56 +0000
csiph-web