PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Sinus() erreur
Sinus() erreur
Iniciado por BALTASAR, 03,ene. 2020 14:01 - 9 respuestas
Miembro registrado
52 mensajes
Publicado el 03,enero 2020 - 14:01
Trace(Sinus(360))
Trace(Sinus(180))


résultat:

-0.0000000000000002449293598295
0.0000000000000001224646799147

???
Publicado el 03,enero 2020 - 14:16
Cela est lié au fait que la valeur retournée par SIN est un réel (cf discussion sur les arrondi : https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/235665-bug-arrondi/read.awp).

Avec ce code ci-dessous, on obtient un résultat plus proche de la réalité (tout au moins pour le 2e trace)
LOCAL
nuValSin1 est un numérique(6, 3)
nuValSin2 est un numérique(6, 3)
rValSin1 est un réel
rValSin2 est un réel
nuSin1deReel est un numérique(6, 3)
nuSin2deReel est un numérique(6, 3)

//trace(Sinus(360), sin(180))
nuValSin1 = Sin(360)
nuValSin2 = Sin(180)

Trace(nuValSin1+" / "+nuValSin2)

rValSin1 = Sin(360)
rValSin2 = Sin(180)
nuSin1deReel = Arrondi(rValSin1, 3)
nuSin2deReel = Arrondi(rValSin2, 3)
Trace(nuSin1deReel+" / "+nuSin2deReel)


Résultat :
-0.001 / 0
0 / 0


J'avoue ne pas comprendre le -0.001 de nuValSin1...
Miembro registrado
52 mensajes
Publicado el 03,enero 2020 - 14:57
Merci pour la réponse, mais l'utilisation de l'arrondi n'est pas appropriée pour les calculs trigonométriques.
Espérons que windev apporte une solution.

Je pense que le problème est qu'en interne ils convertissent les degrés en radians, mais le résultat n'est pas adéquat.
Miembro registrado
4.362 mensajes
Publicado el 03,enero 2020 - 19:24
Bonjour,
C'est l'éternel problème des réels en informatique.
Le fait de passer tes variables en monétaire devrait résoudre le problème.

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
52 mensajes
Publicado el 08,enero 2020 - 10:42
Voroltinquo wrote:
Bonjour,
C'est l'éternel problème des réels en informatique.
Le fait de passer tes variables en monétaire devrait résoudre le problème.

--
Il y a peut être plus simple, mais, ça tourne


Mycurrency is currency = 360
Trace(Sin(Mycurrency))


Résultat: -0.0000000000000002449293598295
Miembro registrado
1.640 mensajes
Publicado el 08,enero 2020 - 10:56
Non ce que Voroltinquo voulait dire c'est :
MySinus is currency = Sin(360)
Trace(MySinus)
Miembro registrado
4.362 mensajes
Publicado el 08,enero 2020 - 11:12
C'est cela, c'est le résultat qu'il faut affecter.
Rien n’empêche non plus de passer la variable à traiter, surtout si, comme cela devrait se faire, on travaille en rad

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
52 mensajes
Publicado el 08,enero 2020 - 13:00
Voroltinquo wrote:
C'est l'éternel problème des réels en informatique.
Le fait de passer tes variables en monétaire devrait résoudre le problème.



François C. wrote:
Non ce que Voroltinquo voulait dire c'est :
MySinus is currency = Sin(360)
Trace(MySinus)



Merci beaucoup
Miembro registrado
256 mensajes
Publicado el 08,enero 2020 - 13:16
Bonjour

Pour moi c'est plus que juste le problème de précision des réels.
De mes (lointains) souvenirs scolaires, la trigonométrie "exacte" en calcul "naturel" n'existe pas vraiment.
Seul le calcul formel est exact, c'est à dire "sin(pi)=0" ... mais pi n'est pas vraiment exprimable en nombre naturel.

Comme les angles sont exprimés en degrés, il est sous doute possible de gérer les cas particuliers de 0, 90, 180, 270 (et donc 360) pour avoir le "plaisir" que les résultats soient corrects pour ces valeurs là.
Vous pouvez donc éventuellement surcharger les fonctions Sinus et Cosinus du WLangage pour gérer les 4 cas particuliers.

Note : en quoi les valeurs obtenues posent-elles problème ?
Dans un calcul complet, les "erreurs" de précision à 10e-12 près devrait finir par être négligeables.
Et si ce n'est pas le cas, pourquoi voudrait-on qu'il n'y ait pas d'erreurs de précisions aux 4 valeurs particulières alors que toutes les autres seraient imprécises ?
Miembro registrado
52 mensajes
Publicado el 08,enero 2020 - 14:25
https://doc.pcsoft.fr/fr-FR/?1514043&name=currencies

"Remarques :
Pour une plus grande précision, il est recommandé d'utiliser les numériques (38 chiffres significatifs)."

¿¿¿¿????