Erros, bugs, perguntas - página 2360

 
Aliaksandr Hryshyn:

Erro para programadores.

O guião não compila, identifica o porquê))))). Utilizar ficheiro anexo.


O mesmo ficheiro:


Todas as compilações, remover linha de erro

 
Vladimir Pastushak:

Tudo compila, apagar linha Erro

limitação do comprimento de linha no editor

 
Fast528:

Limitar o comprimento de uma linha no editor

Uma corda não é exibida quando se torna mais longa do que 4095 caracteres.

 
fxsaber:

Por favor explique a um idiota porque é que isto acontece aqui?

Suponhamos que só podemos operar com números ímpares, e se o resultado de uma operação aritmética se tornar uniforme, assume-se que é o número ímpar mais próximo de cima, então

(43 -  5) - 7  = (38)39 - 7  = (32)33
 43 - (5  + 7) = 43 - (12)13 = (30)31 

33 != 31

 
fxsaber:
Passei várias horas em busca de divergências. Encontrei isto


As peculiaridades são duplamente conhecidas, mas não de tal forma que se alterar a ordem de adição (excepto pelos números relativamente muito diferentes), o resultado é diferente! Por favor explique a um idiota porque é que isto acontece aqui?

Basta olhar para as duas linhas inferiores da fonte.

Como você mesmo gosta de dizer, o agolitmo que é estabelecido para a exactidão do arredondamento duplo para o mesmo número no limite da exactidão especificada é "tortuoso". A razão, obviamente, é que o mesmo valor obtido por métodos diferentes (multiplicadores de troca, abertura de parênteses, etc.) em dupla representação pode revelar-se em números diferentes, maximamente próximos do desejado de lados diferentes. Arredonde para o dígito seguinte e depois decide como lidar com o último...

 
fxsaber:

Quando se faz tamanho+ponto, transborda-se a mantissa seguida de arredondamento/rejeição (dependendo do modo fpu.

   float avg = 0.7;
   float size = 0.3;
   float point = 0.4;

   float r1 = avg - size - point;
   float r2 = avg - (size + point);
   cout << "r1 == r2 ? " << (r1 == r2) << '\n';

   cout << "-----avg-----\n";  prfl(avg);
   cout << "-----size-----\n"; prfl(size);
   cout << "-----point-----\n"; prfl(point);
   cout << "-----avg - size------\n"; prfl(avg - size);
   cout << "-----(avg - size) - point------\n"; prfl((avg - size) - point);
   cout << "-----size + point------\n"; prfl(size + point);
   cout << "-----avg - (size + point)------\n"; prfl(avg - (size + point));
r1 == r2 ? 0
-----avg-----
implicit_1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
exponenta = -1
sign = 0
-----size-----
implicit_1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0
exponenta = -2
sign = 0
-----point-----
implicit_1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1
exponenta = -2
sign = 0
-----avg - size------
implicit_1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
exponenta = -2
sign = 0
-----(avg - size) - point------
implicit_1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
exponenta = -25
sign = 1
-----size + point------
implicit_1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 0
exponenta = -1
sign = 0
-----avg - (size + point)------
implicit_1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
exponenta = -24
sign = 1

Em geral, o resultado de dois doublets só será o mesmo se forem obtidos da mesma forma (a menos que se contem os casos em que estamos a lidar com números inteiros).

 
A100:
Ilya Malev:
pavlick_:

Obrigado pelas respostas, cada uma delas foi valiosa. Pela primeira vez encontrei (reparei) que adicionar os mesmos itens ao PREÇO, mas em sequência diferente cria PREÇOS diferentes. Daí resultados diferentes no Testador.

Ao discutir os dubs, ficou claro quando e porquê podiam ser comparados entre si. Mas o preço mais pontos e o resultado da produção diferente é a primeira vez que o resultado do TC foi tão claramente afectado.


Acontece que para evitar estas ambiguidades, precisamos de adicionar uma mizena de menos de meio ponto ao preço calculado, e depois normalizar.

 
fxsaber:

Acontece que, para evitar estas ambiguidades, precisamos de adicionar ao preço calculado uma mera fracção inferior a meio ponto, e depois normalizar.

E há também a opinião de que se os resultados do TC mudarem muito em relação a coisas tão insignificantes, deve dizer "obrigado" e atirar esse TC para o lixo.

 
fxsaber:

Obrigado pelas respostas, cada uma delas foi valiosa. Primeiro encontrou-se (notou-se) que adicionar os mesmos itens a um PREÇO, mas numa sequência diferente cria PREÇOS diferentes. Daí resultados diferentes no Testador.

Ao discutir os dubs, ficou claro quando e porquê podiam ser comparados entre si. Mas o preço mais pontos e o resultado da produção diferente é a primeira vez que o resultado do TC foi tão claramente afectado.


Acontece que para evitar estas ambiguidades, precisamos de adicionar uma mizena de menos de meio ponto ao preço calculado, e depois normalizar.

Talvez valha a pena cartografar nas características?

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2017.02.24
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Ilya Malev:

E há também a opinião de que se os resultados de um TC mudarem muito em relação a coisas tão pequenas, deve dizer "obrigado" e atirar esse TC para o lixo.

Eles não mudam muito, apenas mudam. Isso é suficiente para iniciar uma investigação.