Pedro
Nombre de messages : 1547 Date d'inscription : 19/01/2014
| Sujet: Problème de parenthèses. Mer 30 Mai 2018 - 15:46 | |
| Bonjour. J'ai simplifié le code précédent au maximum. Et voilà que le résultat est toujours différent ! Les expressions entre parenthèses étant évaluées en priorité, ne devrait-on pas obtenir deux résultats strictement identiques ? La valeur (y) doit être évaluée en premier, et donc on reviendrait au cas précédent ! Pourrait-on éclairer ma lanterne ? - Code:
-
dim crlf$, x, l1, l2, y, ct1
crlf$=chr$(10)+chr$(13)
ct1=180/pi
x=2.3438093 y=-2589.47
l1=x+y/3600/ct1 l2=x+(y)/3600/ct1
message str$(l1)+crlf$+str$(l2) terminate Le code suivant en Blitzbasic donne 2,33126 pour les deux résultats ! - Code:
-
ct1#=180/3.1416
x#=2.3438093 y#=-2589.47
l1#=x#+y#/3600/ct1# l2#=x#+(y#)/3600/ct1# Notify Str$(l1#)+" : "+Str$(l2#) Panoramic indique la valeur -38,87 pour l2 ! | |
|
papydall
Nombre de messages : 6985 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Problème de parenthèses. Mer 30 Mai 2018 - 16:40 | |
| Je pense que tu as raison, Pedro. Pour moi, il y a un problème dans ce cas. C’est à toi Jack de trancher. | |
|
papydall
Nombre de messages : 6985 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Problème de parenthèses. Mer 30 Mai 2018 - 16:49 | |
| - Code:
-
dim a,b,c,d,l1,l2 a = 5 b = -5 c = 14/7 d = 2 l1 = a + b / c / d l2 = a + (b) / c / d print l1 print l2
Le résultat doit-être le même, à savoir 3.75 Mais Panoramic voit les choses autrement | |
|
Navigateur
Nombre de messages : 42 Age : 75 Localisation : Les Clayes-sous-bois 78340 Date d'inscription : 02/09/2016
| Sujet: Re: Problème de parenthèses. Mer 30 Mai 2018 - 18:37 | |
| Bonjour, L'explication est (peut-être) dans le changement de la priorité des opérations ou groupe d'opérations qui suivent la variable qui a été mise entre parenthèses. - Code:
-
Dim x, y, z, ct1 Dim l1, l1_bis, l2, l2_bis
x = 2.3438093 y = -2589.47 z = 3600 ct1 = 180/pi
l1 = x + y / z / ct1 l1_bis = (x) + (y) / (z) / (ct1) l2 = x + (y) / z / ct1 l2_bis = x + y / (z / ct1)
print " x + y / z / ct1 : ", l1 print " (x) + (y) / (z) / (ct1) : ", l1_bis print " x + (y) / z / ct1 : ", l2 print " x + y / (z / ct1) : ", l2_bis
l1 = x + y / z * ct1 l1_bis = (x) + (y) / (z) * (ct1) l2 = x + (y) / z * ct1 l2_bis = x + y / (z * ct1)
print print " x + y / z * ct1 : ", l1 print " (x) + (y) / (z) * (ct1) : ", l1_bis print " x + (y) / z * ct1 : ", l2 print " x + y / (z * ct1) : ", l2_bis
l1 = x + y * z * ct1 l1_bis = (x) + (y) * (z) * (ct1) l2 = x + (y) * z * ct1 l2_bis = x + y * (z * ct1)
print print " x + y * z * ct1 : ", l1 print " (x) + (y) * (z) * (ct1) : ", l1_bis print " x + (y) * z * ct1 : ", l2 print " x + y * (z * ct1) : ", l2_bis
l1 = x + y * z / ct1 l1_bis = (x) + (y) * (z) / (ct1) l2 = x + (y) * z / ct1 l2_bis = x + y * (z / ct1)
print print " x + y * z / ct1 : ", l1 print " (x) + (y) * (z) / (ct1) : ", l1_bis print " x + (y) * z / ct1 : ", l2 print " x + y * (z / ct1) : ", l2_bis A priori, quand une variable/expression est mise entre parenthèses, Panoramic fait d'abord l'évaluation des variables/expressions à sa droite avant d'effectuer le reste des autres opérations en respectant les règles de priorité "classiques" (sauf si une autre variable est mise entre parenthèses). Navigateur PS : à vérifier avec des opérateurs de priorité différente peut-être. : en Freebasic pas de problème avec une variable mise entre parenthèse : x + y / z / ct1 : 2.331255205775772 (x) + (y) / (z) / (ct1) : 2.331255205775772 x + (y) / z / ct1 : 2.331255205775772 x + y / (z / ct1) : -38.86892055972071
Dernière édition par Navigateur le Mer 30 Mai 2018 - 18:59, édité 2 fois | |
|
silverman
Nombre de messages : 968 Age : 51 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Problème de parenthèses. Mer 30 Mai 2018 - 18:37 | |
| C'est un bug, la position des parenthèses en interne est mauvaise: - Code:
-
dim b,c,d,l1,l2
b = -5 : c = 14/7 : d = 2
l1 = b / c / d :' = ( b / c ) / d l2 = (b) / c / d :' = b / ( c / d )
print l1 print ( b / c ) / d :' ---> ok print l2 print b / ( c / d ) :' ---> erreur | |
|
Jean Claude
Nombre de messages : 5948 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Problème de parenthèses. Mer 30 Mai 2018 - 20:30 | |
| Bonsoir, Je me pose une question: quelle est l'intérêt de mettre une variable seule entre parenthèses. Exemple du code de Silverman: l2 = (b) / c / d :' = b / ( c / d )
. A+ | |
|
Pedro
Nombre de messages : 1547 Date d'inscription : 19/01/2014
| Sujet: Problème de parenthèses. Mer 30 Mai 2018 - 20:39 | |
| Bonsoir.
L'intérêt est justement de montrer l'erreur de l'analyseur syntaxique !!
Le code proposé est un raccourci du code montré plus haut !! | |
|
Jean Claude
Nombre de messages : 5948 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Problème de parenthèses. Mer 30 Mai 2018 - 20:53 | |
| Oh ! je ne l'avais pas vu sous cet angle. Montrer l'erreur de l'analyseur syntaxique, OK, mais je pense qu'il y a bien d'autres cas où l'analyse n'est pas au top. Néanmoins, tu as débusqué un lièvre. A+ | |
|
Contenu sponsorisé
| Sujet: Re: Problème de parenthèses. | |
| |
|