Sauf erreur de ma part, je viens de faire une découverte déstabilisante.
Des volontaires pour exécuter le petit script que je vous mets en dessous ?
Après le premier test avec la valeur 2.54 pour diviseur
refaites l'essai avec 25.4
Dites-moi si des résultats obtenus chez vous sont conformes ou délirants ?
Je ne me rappelle pas avoir jamais rencontré cette "anomalie" depuis que je tripote appleScript*.
Le bug provient-il de El Cap ou se perpétue-t-il encore ?
* Ce qui ne veut pas dire qu'elle n'était pas déjÍ lÍ ?
*******************
set diviseur to 2.54
set serie to {0.254, 2.54, 25.4, 254, 2540}
set restes to {}
set text item delimiters to " - "
set commentaire to "Restes de la division par " & (diviseur as text) & " de" & linefeed & (serie as string)
repeat with value in serie
copy (value mod diviseur) to the end of restes
end repeat
display alert (restes's every item as text) message commentaire
*********************
AppleScript operator Description
mod Remainder.
A binary arithmetic operator that divides the number to its left by the number to its right and returns the remainder as its
result.
Class of operands: integer, real Class of result: integer, real
*********************
pour info, avec 2,54 j'obtiens
0,254 - 0,0 - 2,54 - 2,54 - 2,54
et avec 25,4
0,254 - 2,54 - 0,0 - 1,42108547152E-14 - 1,42108547152E-13
Bonjour, Sauf erreur de ma part, je viens de faire une découverte déstabilisante. Des volontaires pour exécuter le petit script que je vous mets en dessous ? Après le premier test avec la valeur 2.54 pour diviseur refaites l'essai avec 25.4 Dites-moi si des résultats obtenus chez vous sont conformes ou délirants ? Je ne me rappelle pas avoir jamais rencontré cette "anomalie" depuis que je tripote appleScript*. Le bug provient-il de El Cap ou se perpétue-t-il encore ? * Ce qui ne veut pas dire qu'elle n'était pas déjÍ lÍ ? ******************* set diviseur to 2.54 set serie to {0.254, 2.54, 25.4, 254, 2540} set restes to {} set text item delimiters to " - " set commentaire to "Restes de la division par " & (diviseur as text) & " de" & linefeed & (serie as string) repeat with value in serie copy (value mod diviseur) to the end of restes end repeat display alert (restes's every item as text) message commentaire ********************* AppleScript operator Description mod Remainder. A binary arithmetic operator that divides the number to its left by the number to its right and returns the remainder as its result. Class of operands: integer, real Class of result: integer, real ********************* pour info, avec 2,54 j'obtiens 0,254 - 0,0 - 2,54 - 2,54 - 2,54 et avec 25,4 0,254 - 2,54 - 0,0 - 1,42108547152E-14 - 1,42108547152E-13
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). -- "...[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
Le 04/12/2021 Í 00:54, Joseph-B a écrit :
Bonjour,
Sauf erreur de ma part, je viens de faire une découverte déstabilisante.
Des volontaires pour exécuter le petit script que je vous mets en dessous ?
Après le premier test avec la valeur 2.54 pour diviseur
refaites l'essai avec 25.4
Dites-moi si des résultats obtenus chez vous sont conformes ou délirants ?
Je ne me rappelle pas avoir jamais rencontré cette "anomalie" depuis que je tripote appleScript*.
Le bug provient-il de El Cap ou se perpétue-t-il encore ?
* Ce qui ne veut pas dire qu'elle n'était pas déjÍ lÍ ?
*******************
set diviseur to 2.54
set serie to {0.254, 2.54, 25.4, 254, 2540}
set restes to {}
set text item delimiters to " - "
set commentaire to "Restes de la division par " & (diviseur as text) & " de" & linefeed & (serie as string)
repeat with value in serie
copy (value mod diviseur) to the end of restes
end repeat
display alert (restes's every item as text) message commentaire
*********************
AppleScript operator Description
mod Remainder.
A binary arithmetic operator that divides the number to its left by the number to its right and returns the remainder as its
result.
Class of operands: integer, real Class of result: integer, real
*********************
pour info, avec 2,54 j'obtiens
0,254 - 0,0 - 2,54 - 2,54 - 2,54
et avec 25,4
0,254 - 2,54 - 0,0 - 1,42108547152E-14 - 1,42108547152E-13
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).
--
"...[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
Bonjour, Sauf erreur de ma part, je viens de faire une découverte déstabilisante. Des volontaires pour exécuter le petit script que je vous mets en dessous ? Après le premier test avec la valeur 2.54 pour diviseur refaites l'essai avec 25.4 Dites-moi si des résultats obtenus chez vous sont conformes ou délirants ? Je ne me rappelle pas avoir jamais rencontré cette "anomalie" depuis que je tripote appleScript*. Le bug provient-il de El Cap ou se perpétue-t-il encore ? * Ce qui ne veut pas dire qu'elle n'était pas déjÍ lÍ ? ******************* set diviseur to 2.54 set serie to {0.254, 2.54, 25.4, 254, 2540} set restes to {} set text item delimiters to " - " set commentaire to "Restes de la division par " & (diviseur as text) & " de" & linefeed & (serie as string) repeat with value in serie copy (value mod diviseur) to the end of restes end repeat display alert (restes's every item as text) message commentaire ********************* AppleScript operator Description mod Remainder. A binary arithmetic operator that divides the number to its left by the number to its right and returns the remainder as its result. Class of operands: integer, real Class of result: integer, real ********************* pour info, avec 2,54 j'obtiens 0,254 - 0,0 - 2,54 - 2,54 - 2,54 et avec 25,4 0,254 - 2,54 - 0,0 - 1,42108547152E-14 - 1,42108547152E-13
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). -- "...[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
Fleuger
Le 4 décembre 2021 Í 00:54, Joseph-B a écrit ceci :
pour info, avec 2,54 j'obtiens 0,254 - 0,0 - 2,54 - 2,54 - 2,54 et avec 25,4 0,254 - 2,54 - 0,0 - 1,42108547152E-14 - 1,42108547152E-13
Bonjour Joseph, Mojave, Restes de la division par 2,54 0,254 - 0,0 - 2,54 - 2,54 - 2,54 Restes de la division par 25,4 0,254 - 2,54 - 0,0 - 1,42108547152E-14 - 1,42108547152E-13 Le défaut provient du Système Même calcul avec Excel : Nombre 0,254 2,54 25,4 254 2540 Diviseur 2,54 2,54 2,54 2,54 2,54 Reste 0,254 0 2,54 2,54 2,54 Nombre 0,254 2,54 25,4 254 2540 Diviseur 25,4 25,4 25,4 25,4 25,4 Reste 0,254 2,54 0 1,42109E-14 1,42109E-13 Résultats identiques avec BigSur En revanche, , si j'utilise la formule =CONVERT(A2;"cm";"in") puis B2, etc, j'obtiens des nombres entiers, 0,254 2,54 25,4 254 2540 0,1 1 10 100 1000 donc pas de restes. (sauf pour 0,1 bien sÍ»r) qui correspond Í 1/10ème. Il faudrait que tu trouves l'équivalent de cette formule en AS -- Gérard FLEUROT
Le 4 décembre 2021 Í 00:54, Joseph-B a écrit ceci :
pour info, avec 2,54 j'obtiens
0,254 - 0,0 - 2,54 - 2,54 - 2,54
et avec 25,4
0,254 - 2,54 - 0,0 - 1,42108547152E-14 - 1,42108547152E-13
Bonjour Joseph,
Mojave,
Restes de la division par 2,54
0,254 - 0,0 - 2,54 - 2,54 - 2,54
Restes de la division par 25,4
0,254 - 2,54 - 0,0 - 1,42108547152E-14 - 1,42108547152E-13
Le défaut provient du Système
Même calcul avec Excel :
Nombre 0,254 2,54 25,4 254 2540
Diviseur 2,54 2,54 2,54 2,54 2,54
Reste 0,254 0 2,54 2,54 2,54
Nombre 0,254 2,54 25,4 254 2540
Diviseur 25,4 25,4 25,4 25,4 25,4
Reste 0,254 2,54 0 1,42109E-14 1,42109E-13
Résultats identiques avec BigSur
En revanche, , si j'utilise la formule =CONVERT(A2;"cm";"in") puis B2,
etc, j'obtiens des nombres entiers,
0,254 2,54 25,4 254 2540
0,1 1 10 100 1000
donc pas de restes. (sauf pour 0,1 bien sÍ»r) qui correspond Í 1/10ème.
Il faudrait que tu trouves l'équivalent de cette formule en AS
--
Gérard FLEUROT
Le 4 décembre 2021 Í 00:54, Joseph-B a écrit ceci :
pour info, avec 2,54 j'obtiens 0,254 - 0,0 - 2,54 - 2,54 - 2,54 et avec 25,4 0,254 - 2,54 - 0,0 - 1,42108547152E-14 - 1,42108547152E-13
Bonjour Joseph, Mojave, Restes de la division par 2,54 0,254 - 0,0 - 2,54 - 2,54 - 2,54 Restes de la division par 25,4 0,254 - 2,54 - 0,0 - 1,42108547152E-14 - 1,42108547152E-13 Le défaut provient du Système Même calcul avec Excel : Nombre 0,254 2,54 25,4 254 2540 Diviseur 2,54 2,54 2,54 2,54 2,54 Reste 0,254 0 2,54 2,54 2,54 Nombre 0,254 2,54 25,4 254 2540 Diviseur 25,4 25,4 25,4 25,4 25,4 Reste 0,254 2,54 0 1,42109E-14 1,42109E-13 Résultats identiques avec BigSur En revanche, , si j'utilise la formule =CONVERT(A2;"cm";"in") puis B2, etc, j'obtiens des nombres entiers, 0,254 2,54 25,4 254 2540 0,1 1 10 100 1000 donc pas de restes. (sauf pour 0,1 bien sÍ»r) qui correspond Í 1/10ème. Il faudrait que tu trouves l'équivalent de cette formule en AS -- Gérard FLEUROT
M.V.
Le 4 décembre 2021 Í 00 h 54, Joseph-B a tenu les propos suivants :
pour info, avec 2,54 j'obtiens 0,254Â -Â 0,0Â -Â 2,54Â -Â 2,54Â -Â 2,54 et avec 25,4 0,254Â -Â 2,54Â -Â 0,0Â -Â 1,42108547152E-14Â -Â 1,42108547152E-13
Mêmes résultats sous Mojave comme te l'a dit Fleuger. Mais je découvre que mod travaillait également avec des décimaux et pas seulement avec des entiers. J'avais toujours pensé que c'était équivalent Í la congruence ! -- Michel VAUQUOIS - <http://michelvauquois.fr>
Le 4 décembre 2021 Í 00 h 54, Joseph-B a tenu les propos suivants :
pour info, avec 2,54 j'obtiens
0,254Â -Â 0,0Â -Â 2,54Â -Â 2,54Â -Â 2,54
et avec 25,4
0,254Â -Â 2,54Â -Â 0,0Â -Â 1,42108547152E-14Â -Â 1,42108547152E-13
Mêmes résultats sous Mojave comme te l'a dit Fleuger.
Mais je découvre que mod travaillait également avec des décimaux et pas
seulement avec des entiers. J'avais toujours pensé que c'était
équivalent Í la congruence !
Le 4 décembre 2021 Í 00 h 54, Joseph-B a tenu les propos suivants :
pour info, avec 2,54 j'obtiens 0,254Â -Â 0,0Â -Â 2,54Â -Â 2,54Â -Â 2,54 et avec 25,4 0,254Â -Â 2,54Â -Â 0,0Â -Â 1,42108547152E-14Â -Â 1,42108547152E-13
Mêmes résultats sous Mojave comme te l'a dit Fleuger. Mais je découvre que mod travaillait également avec des décimaux et pas seulement avec des entiers. J'avais toujours pensé que c'était équivalent Í la congruence ! -- Michel VAUQUOIS - <http://michelvauquois.fr>
Fleuger
Le 4 décembre 2021 Í 09:27, Fleuger a écrit ceci :
Il faudrait que tu trouves l'équivalent de cette formule en AS
++++++++++ set diviseur to 2.54 set serie to {0.254, 2.54, 25.4, 254, 2540} set resultat to {} set text item delimiters to " - " set commentaire to "Résultat de la division par " & (diviseur as text) & " de" & linefeed & (serie as string) repeat with value in serie copy (value div diviseur) to the end of resultat end repeat display alert (resultat's every item as text) message commentaire +++++++++++ donne : display alert "0 - 1 - 10 - 100 - 1000" message "Résultat de la division par 2,54 de 0,254 - 2,54 - 25,4 - 254 - 2540" C'est bien la formule mod qui crée ce résultat. -- Gérard FLEUROT
Le 4 décembre 2021 Í 09:27, Fleuger a écrit ceci :
Il faudrait que tu trouves l'équivalent de cette formule en AS
++++++++++
set diviseur to 2.54
set serie to {0.254, 2.54, 25.4, 254, 2540}
set resultat to {}
set text item delimiters to " - "
set commentaire to "Résultat de la division par " & (diviseur as text) &
" de" & linefeed & (serie as string)
repeat with value in serie
copy (value div diviseur) to the end of resultat
end repeat
display alert (resultat's every item as text) message commentaire
+++++++++++
donne :
display alert "0 - 1 - 10 - 100 - 1000" message "Résultat de la division
par 2,54 de
0,254 - 2,54 - 25,4 - 254 - 2540"
C'est bien la formule mod qui crée ce résultat.
--
Gérard FLEUROT
Le 4 décembre 2021 Í 09:27, Fleuger a écrit ceci :
Il faudrait que tu trouves l'équivalent de cette formule en AS
++++++++++ set diviseur to 2.54 set serie to {0.254, 2.54, 25.4, 254, 2540} set resultat to {} set text item delimiters to " - " set commentaire to "Résultat de la division par " & (diviseur as text) & " de" & linefeed & (serie as string) repeat with value in serie copy (value div diviseur) to the end of resultat end repeat display alert (resultat's every item as text) message commentaire +++++++++++ donne : display alert "0 - 1 - 10 - 100 - 1000" message "Résultat de la division par 2,54 de 0,254 - 2,54 - 25,4 - 254 - 2540" C'est bien la formule mod qui crée ce résultat. -- Gérard FLEUROT
M.V.
Le 4 décembre 2021 Í 10 h 14, Joseph-B a tenu les propos suivants :
Voir ma réponse Í pehache pour contourner le bug en AppleScript.
Les grands esprits se rencontrent : <news:sofc6d$t7u$ Je vois que pour ta routine Modulo(), tu obtiens aussi des résultats du type 0,0 et, pour moi, ça ne veut pas forcément dire 0 : 0,0 signifie, pour moi, une valeur approchée au dixième du résultat !!! -- Michel VAUQUOIS - <http://michelvauquois.fr>
Le 4 décembre 2021 Í 10 h 14, Joseph-B a tenu les propos suivants :
Voir ma réponse Í pehache pour contourner le bug en AppleScript.
Les grands esprits se rencontrent :
<news:sofc6d$t7u$1@dont-email.me>
Je vois que pour ta routine Modulo(), tu obtiens aussi des résultats du
type 0,0 et, pour moi, ça ne veut pas forcément dire 0Â : 0,0 signifie,
pour moi, une valeur approchée au dixième du résultat !!!
--
Michel VAUQUOIS - <http://michelvauquois.fr>
Le 4 décembre 2021 Í 10 h 14, Joseph-B a tenu les propos suivants :
Voir ma réponse Í pehache pour contourner le bug en AppleScript.
Les grands esprits se rencontrent : <news:sofc6d$t7u$ Je vois que pour ta routine Modulo(), tu obtiens aussi des résultats du type 0,0 et, pour moi, ça ne veut pas forcément dire 0 : 0,0 signifie, pour moi, une valeur approchée au dixième du résultat !!! -- Michel VAUQUOIS - <http://michelvauquois.fr>
M.V.
Le 4 décembre 2021 Í 10 h 14, Joseph-B a tenu les propos suivants :
Merci Í toi et MV pour vos tests.
Je viens de tester return (2.001 - 2) dans AS… Faut-il en rire ? -- Michel VAUQUOIS - <http://michelvauquois.fr>
Le 4 décembre 2021 Í 10 h 14, Joseph-B a tenu les propos suivants :
Merci Í toi et MV pour vos tests.
Je viens de tester
return (2.001 - 2)
dans AS… Faut-il en rire ?
--
Michel VAUQUOIS - <http://michelvauquois.fr>
Le 4 décembre 2021 Í 10 h 14, Joseph-B a tenu les propos suivants :
Merci Í toi et MV pour vos tests.
Je viens de tester return (2.001 - 2) dans AS… Faut-il en rire ? -- Michel VAUQUOIS - <http://michelvauquois.fr>
Olivier Miakinen
Bonjour, Le 04/12/2021 10:14, Joseph-B a écrit :
pehache 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'argument *est* recevable et *est* dérangeant mais c'est un problème très connu depuis toujours avec les représentations des nombres en binaire avec virgule flottante. La solution consiste Í travailler en nombres entiers dans une unité de mesure suffisamment petite pour tous tes besoins. Par exemple, si tu as besoin de représenter exactement 2,54 cm, il faut que ton unité de mesure soit aussi petite que le dixième de millimètre. Pour être sÍ»r de ne pas avor de problème, tu peux même travailler au micron (non, je n'ai pas parlé de variant). Tu coup, tes 2,54 cm par pouce, ça devient 25400 µm par pouce et c'est tout Í fait gérable en nombres entiers.
LÍ o͹ il n'est plus soutenable c'est pour (254 mod 2.54) ==> 2.54
C'est la même chose. La valeur la plus proche de zéro doit être un nombre négatif, probablement quelque chose comme -1.4210854715202E-14. Pour en faire un nombre entre 0 et 2,54 le résultat calculé est alors 2,54 - 1.4210854715202E-14, et Í l'affichage ça donne 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 !!
Le Mac n'est pas en cause, ce qui est en cause est inhérent aux calculs en nombres flottants binaires, probablement IEEE 754. Passe en nombres entiers et tes problèmes disparaitront.
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
C'est la même chose.
résultats totalement inacceptables
C'est Í toi de ne *pas* les accepter, en utilisant des nombres entiers. Ou alors il te faut une représentation décimale et non pas binaire, mais je ne sais pas si c'est utilisable simplement dans tes programmes. -- Olivier Miakinen
Bonjour,
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
L'argument *est* recevable et *est* dérangeant mais c'est un problème
très connu depuis toujours avec les représentations des nombres en
binaire avec virgule flottante.
La solution consiste Í travailler en nombres entiers dans une unité de
mesure suffisamment petite pour tous tes besoins. Par exemple, si tu
as besoin de représenter exactement 2,54 cm, il faut que ton unité de
mesure soit aussi petite que le dixième de millimètre. Pour être sÍ»r
de ne pas avor de problème, tu peux même travailler au micron (non, je
n'ai pas parlé de variant).
Tu coup, tes 2,54 cm par pouce, ça devient 25400 µm par pouce et c'est
tout Í fait gérable en nombres entiers.
LÍ o͹ il n'est plus soutenable c'est pour (254 mod 2.54) ==> 2.54
C'est la même chose. La valeur la plus proche de zéro doit être un
nombre négatif, probablement quelque chose comme -1.4210854715202E-14.
Pour en faire un nombre entre 0 et 2,54 le résultat calculé est alors
2,54 - 1.4210854715202E-14, et Í l'affichage ça donne 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 !!
Le Mac n'est pas en cause, ce qui est en cause est inhérent aux calculs
en nombres flottants binaires, probablement IEEE 754. Passe en nombres
entiers et tes problèmes disparaitront.
Pour preuve, toujours dans l'éditeur de script si j'essaie cette fois en
javascript
C'est Í toi de ne *pas* les accepter, en utilisant des nombres entiers.
Ou alors il te faut une représentation décimale et non pas binaire, mais
je ne sais pas si c'est utilisable simplement dans tes programmes.
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'argument *est* recevable et *est* dérangeant mais c'est un problème très connu depuis toujours avec les représentations des nombres en binaire avec virgule flottante. La solution consiste Í travailler en nombres entiers dans une unité de mesure suffisamment petite pour tous tes besoins. Par exemple, si tu as besoin de représenter exactement 2,54 cm, il faut que ton unité de mesure soit aussi petite que le dixième de millimètre. Pour être sÍ»r de ne pas avor de problème, tu peux même travailler au micron (non, je n'ai pas parlé de variant). Tu coup, tes 2,54 cm par pouce, ça devient 25400 µm par pouce et c'est tout Í fait gérable en nombres entiers.
LÍ o͹ il n'est plus soutenable c'est pour (254 mod 2.54) ==> 2.54
C'est la même chose. La valeur la plus proche de zéro doit être un nombre négatif, probablement quelque chose comme -1.4210854715202E-14. Pour en faire un nombre entre 0 et 2,54 le résultat calculé est alors 2,54 - 1.4210854715202E-14, et Í l'affichage ça donne 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 !!
Le Mac n'est pas en cause, ce qui est en cause est inhérent aux calculs en nombres flottants binaires, probablement IEEE 754. Passe en nombres entiers et tes problèmes disparaitront.
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
C'est la même chose.
résultats totalement inacceptables
C'est Í toi de ne *pas* les accepter, en utilisant des nombres entiers. Ou alors il te faut une représentation décimale et non pas binaire, mais je ne sais pas si c'est utilisable simplement dans tes programmes. -- Olivier Miakinen
josephb
M.V. wrote:
Les grands esprits se rencontrent : <news:sofc6d$t7u$
Oui, puisque la fonction "Reste de division" est bugguée et pas la fonction "partie Entière de division" la ruse est est vite trouvée, mais quand même c'est grave puisque le bug semble inclus dans les bibli math de l'OS.
Je vois que pour ta routine Modulo(), tu obtiens aussi des résultats du type 0,0 et, pour moi, ça ne veut pas forcément dire 0 : 0,0 signifie, pour moi, une valeur approchée au dixième du résultat !!!
Non, par convention dans AppleScript 0 signifie que les calculs et le résultat ont eté effectués sur des entiers et 0.0 sur des réels, selon ce que le compilateur aura jugé le plus adapté, ce n'est pas une indication d'arrondi au 1/10ème. Il a été beaucoup reproché Í Applescript de ne pas obliger Í déclarer le type des variables et opérandes utilisés dans le script (Integer, Real, String, List…), laissant Í l'interpréteur deviner de quoi il retourne au prix d'un gÍ¢chis de mémoire et risque d'erreur Í l'exécution alors que la compilation n'aura rien détecté d'incohérent.
Je viens de tester return (2.001 - 2) dans AS…
On peut préférer le résultat par javascript, il y en a pour tous les goÍ»ts. Heureusement il y a toujours une parade programmatique simple : return (2 - 2 + 0.001) dans cet ordre et pas (2+ 0.001-2)
Faut-il en rire ?
Surtout pas, c'est désormais interdit, et c'est tant mieux quand on réalise l'empreinte carbone et la charge virale dangereusement exhalées Í chaque éclat de rire. Sérieusement, ce qu'il nous faut c'est un·e contribut·eur·rice qui voudra bien lancer un # indigné sur Twitter pour qu'Apple se sorte les doigts…? -- J. B.
M.V. <mv@gmail.com.invalid> wrote:
Les grands esprits se rencontrent :
<news:sofc6d$t7u$1@dont-email.me>
Oui, puisque la fonction "Reste de division" est bugguée et pas la
fonction "partie Entière de division" la ruse est est vite trouvée, mais
quand même c'est grave puisque le bug semble inclus dans les bibli math
de l'OS.
Je vois que pour ta routine Modulo(), tu obtiens aussi des résultats du
type 0,0 et, pour moi, ça ne veut pas forcément dire 0 : 0,0 signifie,
pour moi, une valeur approchée au dixième du résultat !!!
Non, par convention dans AppleScript 0 signifie que les calculs et le
résultat ont eté effectués sur des entiers et 0.0 sur des réels, selon
ce que le compilateur aura jugé le plus adapté, ce n'est pas une
indication d'arrondi au 1/10ème.
Il a été beaucoup reproché Í Applescript de ne pas obliger Í déclarer le
type des variables et opérandes utilisés dans le script (Integer, Real,
String, List…), laissant Í l'interpréteur deviner de quoi il retourne au
prix d'un gÍ¢chis de mémoire et risque d'erreur Í l'exécution alors que
la compilation n'aura rien détecté d'incohérent.
Je viens de tester
return (2.001 - 2)
dans AS…
On peut préférer le résultat par javascript, il y en a pour tous les
goͻts.
Heureusement il y a toujours une parade programmatique simple :
return (2 - 2 + 0.001) dans cet ordre et pas (2+ 0.001-2)
Faut-il en rire ?
Surtout pas, c'est désormais interdit, et c'est tant mieux quand on
réalise l'empreinte carbone et la charge virale dangereusement exhalées
Í chaque éclat de rire.
Sérieusement, ce qu'il nous faut c'est un·e contribut·eur·rice qui
voudra bien lancer un # indigné sur Twitter pour qu'Apple se sorte les
doigts…?
Les grands esprits se rencontrent : <news:sofc6d$t7u$
Oui, puisque la fonction "Reste de division" est bugguée et pas la fonction "partie Entière de division" la ruse est est vite trouvée, mais quand même c'est grave puisque le bug semble inclus dans les bibli math de l'OS.
Je vois que pour ta routine Modulo(), tu obtiens aussi des résultats du type 0,0 et, pour moi, ça ne veut pas forcément dire 0 : 0,0 signifie, pour moi, une valeur approchée au dixième du résultat !!!
Non, par convention dans AppleScript 0 signifie que les calculs et le résultat ont eté effectués sur des entiers et 0.0 sur des réels, selon ce que le compilateur aura jugé le plus adapté, ce n'est pas une indication d'arrondi au 1/10ème. Il a été beaucoup reproché Í Applescript de ne pas obliger Í déclarer le type des variables et opérandes utilisés dans le script (Integer, Real, String, List…), laissant Í l'interpréteur deviner de quoi il retourne au prix d'un gÍ¢chis de mémoire et risque d'erreur Í l'exécution alors que la compilation n'aura rien détecté d'incohérent.
Je viens de tester return (2.001 - 2) dans AS…
On peut préférer le résultat par javascript, il y en a pour tous les goÍ»ts. Heureusement il y a toujours une parade programmatique simple : return (2 - 2 + 0.001) dans cet ordre et pas (2+ 0.001-2)
Faut-il en rire ?
Surtout pas, c'est désormais interdit, et c'est tant mieux quand on réalise l'empreinte carbone et la charge virale dangereusement exhalées Í chaque éclat de rire. Sérieusement, ce qu'il nous faut c'est un·e contribut·eur·rice qui voudra bien lancer un # indigné sur Twitter pour qu'Apple se sorte les doigts…? -- J. B.
josephb
Olivier Miakinen <om+ wrote:
C'est Í toi de ne *pas* les accepter, en utilisant des nombres entiers.
Tu me donnes des ordres ou c'est une formule réthorique ? Dans tous les cas l'argument est irrecevable et je n'ai pas envie d'épiloguer. Merci de tes efforts, mais au mieux ça me donne Í penser au sketch du tailleur et du costume de Fernand Raynaud. -- J. B.
Olivier Miakinen <om+news@miakinen.net> wrote:
C'est Í toi de ne *pas* les accepter, en utilisant des nombres entiers.
Tu me donnes des ordres ou c'est une formule réthorique ?
Dans tous les cas l'argument est irrecevable et je n'ai pas envie
d'épiloguer.
Merci de tes efforts, mais au mieux ça me donne Í penser au sketch du
tailleur et du costume de Fernand Raynaud.
C'est Í toi de ne *pas* les accepter, en utilisant des nombres entiers.
Tu me donnes des ordres ou c'est une formule réthorique ? Dans tous les cas l'argument est irrecevable et je n'ai pas envie d'épiloguer. Merci de tes efforts, mais au mieux ça me donne Í penser au sketch du tailleur et du costume de Fernand Raynaud. -- J. B.
Olivier Miakinen
Le 04/12/2021 13:16, Joseph-B a écrit :
C'est Í toi de ne *pas* les accepter, en utilisant des nombres entiers.
Tu me donnes des ordres ou c'est une formule réthorique ?
Ah non, ça c'est seulement si tu veux des résultats justes. Si tu acceptes d'avoir des résultats aléatoirement faux, tu peux continuer comme avant. Pour info, le nombre 2,54 n'est pas représentable dans un flottant. Les nombres les plus proches sont : 2 + 1215971899390033/2^51 =~ 2,539999999999999591437926 2 + 1215971899390034/2^51 =~ 2,540000000000000035527136 Je précise que ma réponse n'est pas liée au Mac, d'ailleurs je n'ai jamais utilisé un Mac de ma vie (seulement des Windows et des Linux depuis des décennies, et avant un Apple 2). -- Olivier Miakinen
Le 04/12/2021 13:16, Joseph-B a écrit :
C'est Í toi de ne *pas* les accepter, en utilisant des nombres entiers.
Tu me donnes des ordres ou c'est une formule réthorique ?
Ah non, ça c'est seulement si tu veux des résultats justes. Si tu
acceptes d'avoir des résultats aléatoirement faux, tu peux continuer
comme avant.
Pour info, le nombre 2,54 n'est pas représentable dans un flottant.
Les nombres les plus proches sont :
2 + 1215971899390033/2^51 =~ 2,539999999999999591437926
2 + 1215971899390034/2^51 =~ 2,540000000000000035527136
Je précise que ma réponse n'est pas liée au Mac, d'ailleurs je n'ai
jamais utilisé un Mac de ma vie (seulement des Windows et des Linux
depuis des décennies, et avant un Apple 2).
C'est Í toi de ne *pas* les accepter, en utilisant des nombres entiers.
Tu me donnes des ordres ou c'est une formule réthorique ?
Ah non, ça c'est seulement si tu veux des résultats justes. Si tu acceptes d'avoir des résultats aléatoirement faux, tu peux continuer comme avant. Pour info, le nombre 2,54 n'est pas représentable dans un flottant. Les nombres les plus proches sont : 2 + 1215971899390033/2^51 =~ 2,539999999999999591437926 2 + 1215971899390034/2^51 =~ 2,540000000000000035527136 Je précise que ma réponse n'est pas liée au Mac, d'ailleurs je n'ai jamais utilisé un Mac de ma vie (seulement des Windows et des Linux depuis des décennies, et avant un Apple 2). -- Olivier Miakinen