Um resultado realmente incrível!!! - página 6

 
Reshetov писал(а) >>

Clive Sinclair uma vez desenvolveu o computador pessoal barato ZX-Spectrum. Depois que a primeira versão foi esgotada em grandes quantidades, descobriu-se que os desenvolvedores tinham um monte de bugs na ROM. Assim, eles tomaram a decisão de documentar os erros em vez de corrigi-los para torná-los totalmente compatíveis com as versões anteriores. E a decisão acabou sendo correta, porque os bugs foram posteriormente utilizados para proteger o software deste mesmo computador contra rachaduras.


Acredito que o bug descrito neste tópico também pode ser mantido e utilizado para proteger os Expert Advisors, ou seja, para inserir uma condição incorreta do ponto de vista lógico, por exemplo, para verificar a data de validade. E deixar os que descompilam enlouquecerem.

A discussão deste erro, espero, motivará os desenvolvedores da MQL5 a corrigi-lo. Terei que reescrever todos os programas na MQL5 de qualquer forma.

 
nen >> :

Espera-se que a discussão deste erro inspire os desenvolvedores da MQL5 a corrigi-lo. Terei que reescrever todos os programas na MQL5 de qualquer forma.

Uma prova de que se trata de um erro, vamos a isso!

Na verdade, uma declaração em contrário:


As leis básicas da álgebra booleana

Duas fórmulas de álgebra booleana são equivalentes se as funções a elas atribuídas forem iguais (ou seja, assumem os mesmos valores em todos os conjuntos de valores de argumentos). Abaixo estão as leis básicas da álgebra booleana que permitem transformações idênticas das fórmulas da álgebra booleana (note como elas são semelhantes às leis da aritmética clássica):

  1. a lei da dupla negação: não x = x
  2. a lei da comutatividade (o resultado não muda devido à permutação de argumentos):
    x 1 ou x 2 = x 2 ou x 1
    x 1 e x 2 = x 2 e x 1

  3. A lei da associatividade (a ordem dos cálculos)
    x 1 ou (x 2 ou x 3 ) = (x 1 ou x 2 ) ou x 3
    x 1 e (x 2 e x 3 ) = (x 1 e x 2 ) e x 3

  4. a lei da distributividade (abertura de parênteses):
    x 1 ou (x 2 e x 3 ) = (x 1 ou x 2 ) e (x 1 ou x 3 )
    x 1 e (x 2 ou x 3 ) = (x 1 e x 2 ) ou (x 1 e x 3 )
  5. ...

Do qual se deduz que do ponto de vista da álgebra booleana as operações ou e têm a mesma prioridade.

 
Não se trata de um erro. É um maldito erro.
 
TheXpert писал(а) >>

a lei da distributividade (abrir parênteses):
x 1 ou (x 2 e x 3 ) = (x 1 ou x 2 ) e (x 1 ou x 3 )
x 1 e (x 2 ou x 3 ) = (x 1 e x 2 ) ou (x 1 e x 3 )

Portanto, do ponto de vista das operações de álgebra booleana e têm a mesma prioridade.

Não seja pateta. Seu exemplo difere daquele que iniciou a discussão. Dê uma olhada mais de perto.

 
keekkenen писал(а) >>

Na verdade, este não é um assunto para um programador, porque a especificação de cada idioma vem primeiro e não importa que haja outros padrões em algum lugar...

e um único padrão é um sonho de canalização.

Acho que esta é a idéia mais adequada.

Cada idioma tem seus próprios padrões. Por exemplo, C++ e Pascal têm regras diferentes de cálculo de números inteiros. Em alguns idiomas, os índices começam com 0, enquanto em outros começam com 1. Não creio que tudo isso tenha importância alguma.

O importante é uma má interpretação das leis da natureza, ou seja, aquelas leis que estão além do controle humano. E as regras e leis criadas pelos seres humanos são prerrogativa de seus criadores. Neste caso, é importante apenas que as leis sejam promulgadas; neste caso, as regras são publicadas.

Vamos nos concentrar melhor no campo aplicado:)

 

Senhores, na página dois deste tópico eu dei um link e uma citação da documentação - Prioridades e Ordem de Operação. Vou dar de novo de forma condensada:

Atenção: a prioridade das operações na MQL4 difere ligeiramente da da MQL4 na C.


Portanto, é incorreto falar de um bug.

 

Lembro-me do humor de Zadornov "O que é dois mais duas vezes dois". Uma boa ilustração do debate religioso sobre a prioridade. E em geral, o tópico é barbudo, você poderia ter usado a busca no site - em vez de criar um novo fio condutor.

P.S. Eh, MuruFigi o inimigo, e por que você montou Pak ...

 
Mathemat писал(а) >>

O tópico tem barba, você poderia ter usado a busca no site em vez de criar um novo fio condutor.

O tópico continuará a ser relevante. Os desenvolvedores parecem gostar.

O próximo "novato" programador vai bater com a cabeça contra o assunto. E tudo se repetirá (hee-hee).

E não sai do ar rarefeito.

Os desenvolvedores decidiram reciclar cada um à sua maneira.

Vai ser um tema eterno... Até a outra ponta da linha ficar cansada de.... persistir

 
Mathemat писал(а) >>

Debates religiosos sobre prioridade

O costume aqui é fazer um produto inclinado com as mãos tortas crescendo em %, mas todos se calam porque não há outro produto ... ou há, mas seria melhor não haver ))

..

Um exemplo simples "por conta própria", ao usar o if() muitas vezes aparece um bug - ao combinar && e uma série de condições >/</!=, o que é muito estranho,

você copia a cadeia Comentário() para revisão - 1, 1, 1, 1, 1, etc - tudo está OK, mas se() não "funciona", você faz uma "escada" if() { if() { if() { if() { ... }}}

tudo funciona ... falha do metacompilador eu acho, ... e o que, os desenvolvedores acham que eles vão ser browbeaten e provar, ... hehe

 
Rosh писал(а) >>

Senhores, na página dois deste tópico eu dei um link e uma citação da documentação - Prioridades e Ordem de Operação. Vou dar de novo de forma condensada:

Atenção: a prioridade das operações na MQL4 difere ligeiramente da da MQL4 na C.

Portanto, é incorreto falar de um bug.

Bem, eu meio que concordei na segunda página que se fosse um bug no compilador, deveríamos falar sobre um bug na mente do desenvolvedor em vez de no compilador. Sem ofensa, eu fiz este fio para me divertir.

O que eu não entendo agora é isto.

Em que é desenvolvido o compilador MQL? Se for desenvolvido em uma linguagem normal, os programadores devem ter ficado loucos pelo fato de que as operações de multiplicação e adição têm prioridade igual. Como eles poderiam ter perdido isso? Será que todos realmente colocam parênteses onde querem e onde não querem? A propósito, também, muitos parênteses tornam o código mais claro. E quando seus programadores escrevem operações aritméticas como 2+3*4 eles também escrevem 2+(3*4), ou Deus proíba que um bug possa escorregar para um compilador C++ e aninhar 100 colchetes em uma expressão manualmente conte-o:)