Page 1 sur 2

[RESOLU] Je deviens dingue !! 😜

Publié : dim. 19/mars/2023 17:18
par falsam
J'essaye de coder une formule pour calculer la distance entres deux points 3D.

Code : Tout sélectionner

Result = Sqr(Pow((N0\x − N1\x), 2) + Pow((N0\y −N1\y), 2) + Pow((N0\z − N1\z), 2))
qu'importe si la formule est bonne ou pas pour le moment. (Normalement elle devrait être bonne)

■ L'exécution (F5) me retourne un souci de parenthèse fermante. Pour moi pas de souci.

■ J'ai fait un test.
Result = (3−2) me retourne le même message d'erreur.
Debug (3 − 2) me retourne le même message d'erreur.
Debug 3 - 2 me retourne une erreur en fin de ligne.

Image

Re: Je deviens dingue !!

Publié : dim. 19/mars/2023 17:38
par Guillot
pinaise !!!
j'ai essayé de simplifier

Code : Tout sélectionner

Define.vector3 n0,n1
result = Pow(N0\x − N1\x, 2)
me retourne une erreur de syntaxe

quand à tes debug, le message d'erreur est erroné, mais la syntaxe n'est pas valide (il veut un string)

Re: Je deviens dingue !!

Publié : dim. 19/mars/2023 17:43
par falsam
Guillot a écrit : dim. 19/mars/2023 17:38 j'ai essayé de simplifier
J'ai effectivement des parenthèses superflues. Mais ca ne résout pas le souci ;)

Re: Je deviens dingue !!

Publié : dim. 19/mars/2023 17:58
par Guillot
ouai je pense que c'est un petit bug du compilo (ou plutot de l'analyseur syntaxique)

même

Code : Tout sélectionner

result = Pow(2 − 1, 2)
me retourne une erreur de syntaxe, parfois pas !!!

je supprime le -1 ça passe
je le remet : ça passe ??

Re: Je deviens dingue !!

Publié : dim. 19/mars/2023 18:05
par boddhi
Simplifié en

Code : Tout sélectionner

Debug Sqr(Pow((4 − 2), 2) + Pow((9 − 6), 2) + Pow((25 − 5), 2))
;ou en
Debug Pow((4 − 2), 2) + Pow((9 − 6), 2) + Pow((25 − 5), 2)
Idem: Erreur de parenthèse fermante
J'ai testé avec toutes les versions PB depuis la 5.62 (j'ai désinstallé les plus anciennes) : même résultat.

En revanche, pas de problème avec des lignes du type :

Code : Tout sélectionner

Debug Pow(4-2,2)
A.a=4:B.a=2
Debug Pow(A-B,2)
Bug confirmé semble-t-il...

Re: Je deviens dingue !!

Publié : dim. 19/mars/2023 18:35
par Fig
Ca rend fou effectivement, surtout de perdre son weekend sur des bugs... :twisted:

En faisant abstraction de ça, personnellement, je décompose tous les calculs car le mélange d'entier et de flottants et de parenthèses, avec Pb, ça fait des erreurs compliquées à localiser. Du coup il y a des calculs très vilains sur 10 lignes parfois.

Re: Je deviens dingue !!

Publié : dim. 19/mars/2023 22:01
par SPH
J'ai localisé l'erreur (une partie de... ?).

Un "Pow" doit avoir 2 paramètres sans calcul supplémentaire entre les parenthèses.

Code : Tout sélectionner

c=a-b
r = Sqr(Pow(c, 2))
Debug r
PS : C'est un truc qui fait tourner en bourique car maintenant, je peux avoir 2 paramètres avec calcul supplémentaire entre les parenthèses.

===

C'est un bug; pas de doute... :roll:

Re: Je deviens dingue !!

Publié : lun. 20/mars/2023 4:17
par Ollivier
- Peut-être pensez à mettre 55.0 pour la valeur 55
- Peut-être pensez à fournir des types "Double" (ou flottants) pour les fonctions qui exigent ça. (Pow() en l'occurence)

Je n'ai jamais eu de problèmes avec Pow() sauf quand je l'ai découverte : j'ai dû avoir des bugs slmilaires, puis en lisant la documentation, j'avais vu que ça traitait des nombres à virgule, et << ceci avait expliqué cela >>.

C'est ce que j'apprécie en pureBasic (comme avec le c...) : les types sont explicites et à traiter/contrôler. C'est ce qui me répugne avec le javaScript. Après, c'est vrai qu'un message d'erreur dédié en pureBasic aurait été plus propre (ex : << Type non défini >> ou << Type incompatible >> ou etc...)



Pour les parenthèses, je suis stoïque. Le rapport d'erreur de falsam me fait penser à du darkBasic de 2003. Vingt ans déjà... Quel bonheur d'avoir découvert un compilateur nommé pureBasic qui gérait parfaitement les parenthèses.

Re: Je deviens dingue !!

Publié : lun. 20/mars/2023 8:27
par Guillot
moi je pense que c'est un bug de l'analyseur syntaxique
des fois ça passe, des fois ça passe pas

Re: Je deviens dingue !!

Publié : lun. 20/mars/2023 10:02
par falsam
Guillot a écrit : lun. 20/mars/2023 8:27 des fois ça passe, des fois ça passe pas
ce code que j'ai décomposé ne passe jamais et je ne vois aucune erreur de parenthèse.

Code : Tout sélectionner

Define n0.vector3
Define n1.vector3

Define r1.f = Pow(n0\x − n1\x, 2)
Define r2.f = Pow(n0\y − n1\y, 2)
Define r3.f = Pow(n0\z − n1\z, 2)

Result.f = Sqr(r1 + r2 + r3)
Fig a écrit : dim. 19/mars/2023 18:35 je décompose tous les calculs car le mélange d'entier et de flottants et de parenthèses, avec Pb, ça fait des erreurs compliquées à localiser.
J'ai décomposé le code précédent.

Code : Tout sélectionner

Define n0.vector3
Define n1.vector3
Define r1.f = Pow(n0\x − n1\x, 2)
Define r2.f = Pow(n0\y − n1\y, 2)
Define r3.f = Pow(n0\z − n1\z, 2)

Result.f = Sqr(r1 + r2 + r3)
Même message d'erreur que précédemment.

:idea: Pour ne pas avoir d'erreur je suis obligé de décomposer de cette maniére

Code : Tout sélectionner

Define n0.vector3
Define n1.vector3

Define n0x.f  = n0\x
Define n0y.f  = n0\y
Define n0z.f  = n0\z

Define n1x.f  = n1\x
Define n1y.f  = n1\y
Define n1z.f  = n1\z

Define rx.f   = n0x - n1x
Define ry.f   = n0y - n1y
Define rz.f   = n0z - n1z

Define r1.f = Pow(rx, 2)
Define r2.f = Pow(ry, 2)
Define r3.f = Pow(rz, 2)

Result.f = Sqr(r1 + r2 + r3)
C'est pas un peu trop ? :wink:

Le code initial en beaucoup plus court était celui là sur trois lignes. Mais ça ne fonctionne pas !

Code : Tout sélectionner

Define n0.vector3
Define n1.vector3

Result.f = Sqr(Pow(n0\x − n1\x, 2) + Pow(n0\y − n1\y, 2) + Pow(n0\z − n1\z, 2))

Re: Je deviens dingue !!

Publié : lun. 20/mars/2023 10:30
par blendman
coucou

OUi, il doit y avoir un bug, car même juste ça , ça me met une erreur "garbage à la fin de la ligne "n = n0\x − n1\x""

Code : Tout sélectionner

Structure vector3
  x.f
  y.f
  z.f
EndStructure

Define n0.vector3
Define n1.vector3

Define n.f = 0
n = n0\x − n1\x

Re: Je deviens dingue !!

Publié : lun. 20/mars/2023 10:55
par falsam
vector3 est déja défini dans la version 6.01 de PureBasic. Je suppose que tu testes avec 5.73 ?

Re: Je deviens dingue !!

Publié : lun. 20/mars/2023 19:37
par Fig
falsam a écrit : lun. 20/mars/2023 10:02 C'est pas un peu trop ? :wink:
Evidemment que oui, mais c'est exactement ce que je dois faire parfois... Le sentiment de perdre beaucoup de cycle à affecter des variables intermédiaires. GRRR.
Ensuite, je groupe par essais successifs. Pénible. Je crois que c'est à cause de l'inexistence de "Cast" explicite en Pb.

Re: Je deviens dingue !!

Publié : lun. 20/mars/2023 21:23
par Ollivier
Je tenterai quand j aurai le temps sur 5.73 et 6.00LTS.

C'est possible qu'il y ait une quenouille en v6.00 car "nibble" ne fonctionnait pas sur la v6.00 sans que j'insiste trop à chercher.

En tout cas, je ne prends jamais le risque de laisser un mécanisme de changement de 'range' (32 <<<=>>> 64) se produire.

C'est soit tout 'double' soit tout 'float'...

Re: Je deviens dingue !! 😜

Publié : lun. 20/mars/2023 22:02
par falsam
En discutant sur Discord Naheuf a trouvé un truc bizarre.

Code : Tout sélectionner

Define n0.vector3
Define n1.vector3

Result.f = Sqr(Pow(n0\x − n1\x, 2) + Pow(n0\y − n1\y, 2) + Pow(n0\z − n1\z, 2))
ce code ne fonctionne pas.

Mais si je retape les -, ca fonctionne !! mes "-" ne sont pas forcément des "-"

Code : Tout sélectionner

Define n0.vector3
Define n1.vector3

Result.f = Sqr(Pow(n0\x - n1\x, 2) + Pow(n0\y - n1\y, 2) + Pow(n0\z - n1\z, 2))
Le premier code fonctionne pas, le deuxième code fonctionne.