[RESOLU] Je deviens dingue !! 😜

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

[RESOLU] Je deviens dingue !! 😜

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Guillot
Messages : 672
Inscription : jeu. 25/juin/2015 16:18

Re: Je deviens dingue !!

Message 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)
Dernière modification par Guillot le dim. 19/mars/2023 17:52, modifié 1 fois.
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Je deviens dingue !!

Message 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 ;)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Guillot
Messages : 672
Inscription : jeu. 25/juin/2015 16:18

Re: Je deviens dingue !!

Message 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 ??
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: Je deviens dingue !!

Message 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...
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Je deviens dingue !!

Message 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.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Je deviens dingue !!

Message 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:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Je deviens dingue !!

Message 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.
Avatar de l’utilisateur
Guillot
Messages : 672
Inscription : jeu. 25/juin/2015 16:18

Re: Je deviens dingue !!

Message par Guillot »

moi je pense que c'est un bug de l'analyseur syntaxique
des fois ça passe, des fois ça passe pas
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Je deviens dingue !!

Message 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))
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Je deviens dingue !!

Message 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
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Je deviens dingue !!

Message par falsam »

vector3 est déja défini dans la version 6.01 de PureBasic. Je suppose que tu testes avec 5.73 ?
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Je deviens dingue !!

Message 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.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Je deviens dingue !!

Message 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'...
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Je deviens dingue !! 😜

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre