¡¡¡Un resultado realmente sorprendente!!! - página 7

 
MuruFigi >> :

Bueno, yo estaba de acuerdo en la segunda página en que si es así, no deberíamos hablar de un fallo en el compilador, sino de un fallo en el cerebro de los desarrolladores. No te ofendas, hice este hilo más bien para reírme.

Lo que no entiendo ahora es esto.

¿Sobre qué se desarrolla el compilador MQL? Si está desarrollado en un lenguaje normal, a los programadores les debe haber enloquecido el hecho de que las operaciones de multiplicación y suma tengan la misma prioridad. ¿Cómo se les pudo escapar? ¿De verdad todo el mundo pone paréntesis donde quiere y donde no quiere? Por cierto, también, demasiados paréntesis hacen que el código sea más claro. Y cuando sus programadores escriben operaciones aritméticas como 2+3*4 también escriben 2+(3*4), o Dios no quiera que se cuele un error en un compilador de C++ y se aniden 100 paréntesis en una expresión manualmente:)

Se trata de un error en el cerebro de los desarrolladores de C, Java, Fortran, MathCad, etc.


¡Cómo no lo entiendes todavía!


ZS


Aunque, lo admito, yo también tardé en darme cuenta.

 
sol писал(а) >>

Aunque, lo admito, yo también tardé en darme cuenta.

Sólo ahora ha quedado claro por qué algunas combinaciones lógicas no querían funcionar correctamente. Tuve que añadir paréntesis artificiales.

Antes no podía explicarlo. Pero tampoco he sacado el tema. Conseguí encontrar la solución adecuada husmeando. ¿Pero cuántas veces he tenido que hurgar para cambiar todo?

 
nen >> :

Sólo ahora ha quedado claro por qué algunas combinaciones lógicas no querían funcionar correctamente. Tuve que añadir paréntesis artificiales.

No había nada que lo explicara antes. Pero tampoco he sacado el tema. Conseguí encontrar la solución adecuada husmeando. ¿Pero cuántas veces he tenido que hurgar para encontrarlo todo?

RTFM


*rofl*

 
MuruFigi >>: ¿Realmente todo el mundo pone paréntesis donde debe y donde no debe?

Bueno, no todos seguidos, por supuesto, pero siempre lo hago. Y por pura costumbre los puse mucho antes de enterarme de este "error en la cabeza de los desarrolladores". ¿Y por qué tengo que ahondar en la Ayuda una vez más para averiguar las prioridades, si puedo prescindir de ella, poniendo paréntesis? Así que para mí, este "bicho" no fue un desastre, aunque me divirtió.

Y antes, cuando escribía algo booleano en C, también los ponía, aunque no dudaba de las prioridades. Para ser sincero, creo que una expresión booleana compleja sin paréntesis no es muy legible.

P.D. Por favor, no utilices un ejemplo tan imbécil como 2+3*4. Si un movimiento tan inteligente con las prioridades hubiera sucedido para las operaciones aritméticas, no tendría absolutamente ningún reparo en llamarlo un verdadero bug.

Por cierto:

  1. La ley de la distributividad (apertura de paréntesis):
    x 1 o (x 2 y x 3 ) = (x 1 o x 2 ) y (x 1 o x 3 )
    x 1 y (x 2 o x 3 ) = (x 1 y x 2 ) o (x 1 y x 3 )
  2. ...

De ello se deduce que, desde el punto de vista del álgebra booleana, las operaciones y tienen la misma prioridad.

Andrei, ¿qué te hizo concluir que las prioridades de estas operaciones en el álgebra booleana son iguales? Contraejemplo:

en a=1, b=0, c=0

(a o b) y c = (1 o 0) y 0 = 0

a o (b y c) = 1 o (0 y 0) = 1

 
Si el desarrollador fuera del extranjero, al menos se le daría las gracias por haber encontrado el fallo. Y el tema se habría cerrado rápidamente refiriéndose a que los trabajos de arreglo ya están en pleno desarrollo: valoran su reputación (cuesta mucho dinero). Y nosotros decimos "tonto", lee la documentación, las especificaciones, las tablas, etc. Este no sería el caso si MT4 tuviera un competidor.
 
MuruFigi >> :

¿En qué está desarrollado el compilador MQL? Al fin y al cabo, si se desarrolla en un lenguaje normal, los programadores deberían haberse escandalizado, en primer lugar, por el hecho de que sus operaciones de multiplicación y adición tengan la misma prioridad. ¿Cómo se les pudo escapar?

Pues aquí tenemos otro ejemplo de extralimitación. Y sin embargo, el iniciador del tema informa de que empezó el hilo como una broma, y que después de todo había leído la documentación.

 
Rosh >> :

Pues aquí tenemos otro ejemplo de extralimitación. Y eso que el que empezó dice que inició el tema como una broma, y que a estas alturas ya ha leído la documentación.

Ya lo tengo :-) Quizá sea cierto que los grandes descubrimientos se hacen a gusto con objetivos muy diferentes.

 
Galaxy >> :

Ya he tenido suficiente :-). Tal vez sea cierto que los grandes descubrimientos se hacen a gusto, teniendo propósitos muy diferentes.

Este "descubrimiento" difícilmente puede calificarse de gran descubrimiento. Merece la pena constatar el hecho y olvidarse de él. En general, el tema de la prioridad de las operaciones booleanas es descabellado: sería más barato para los desarrolladores prohibir simplemente la construcción de expresiones booleanas con diferentes operaciones sin paréntesis y considerar tales construcciones como inválidas.

 
Mathemat >> :

Andrew, ¿de qué deduces realmente que las prioridades de estas operaciones en el álgebra booleana son iguales? Contraejemplo:

en a=1, b=0, c=0

(a o b) y c = (1 o 0) y 0 = 0

a o (b y c) = 1 o (0 y 0) = 1

a = hermoso

b = inteligente

c = rico

x = a && b && c ;

y = a || b | c ;


Me pregunto qué prefieres, Andrei: ¿x = 1 o y = 1?

 
Mathemat >> :

Andrew, ¿de qué has deducido que las prioridades de estas operaciones en el álgebra booleana son iguales?

De la simetría de las operaciones. Y la simetría de las operaciones se deduce directamente de las fórmulas asignadas.

Una operación simétrica no puede tener prioridad sobre otra.

>> :

Me pregunto qué preferiría Andrey: ¿x = 1 o y = 1?

Preferiría, Eric, discutir sin caer en lo personal y en el desprecio.

___________________________________

De todos modos, mi punto es.

El resultado de la expresión A && B || C es indefinido en términos de álgebra booleana.