IgorM: Eu não gosto de continuar e quebrar operadores, mas talvez eles possam ajudá-lo, especialmente porque um 36 vezes mais se no mql pode não funcionar
Se não funcionasse, eu usaria continuar... Mas não quero me preocupar em nada com isso. Prefiro criar um algoritmo diferente, pelo menos seria interessante.
E acelerar Meu código pode ser quebrado se, consistindo de uma complexa condição de verificação de 36 entradas, em 36 ifs com uma condição simples! :)))
Acho que o código se aceleraria notavelmente, embora para ter certeza você precise entender as instruções da máquina, que são o resultado da compilação.
Eu corri seu código no MT5. Ele já tem avaliações curtas dos operadores lógicos já implementados (incorporados), portanto não há necessidade de quebrar o código em muitos "se".
No MT4 é diferente, esta otimização faz sentido lá. Mas eu fiz avaliação de tempo no MT5, por um curto esquema.
Tenho uma idéia para escrever um algoritmo de divisão de colunas. Divida por dígitos, anote o restante da divisão e, quando o resultado for maior que 6, faça a operação contínua. Foi exatamente isso que fiz esta tarde, quando estava passando pelas cinco, dividi tudo em colunas. Mas é um longo tempo chegando! :))
É na representação do número hexadecimal que você precisa fazer a otimização, como você já fez.
Tenho uma idéia para escrever um algoritmo de divisão de colunas. Divida por dígitos, anote o restante da divisão e se corresponder ou o resultado for maior que 6, faça a operação contínua. Foi exatamente isso que fiz esta tarde, quando estava passando pelas cinco, dividi tudo em colunas. Mas é um longo tempo chegando! :))
É na representação de números de seis dígitos que precisamos otimizar, como você já fez.
О! Isso não é uma má idéia. Reescreveu-o novamente. WorkTime=125 ms.
bool Validate(int X)
{
int XX=0;
int A[];
if(!IntToArray(X,A)) returnfalse; // изменено здесь тоже, но основное ниже
for(int i=5;i>-1;i--)
{
XX|=int(1<<A[i]);
}
if(XX==0x7E) {returntrue;}
returnfalse;
}
bool IntToArray(int X,int &A[])
{
ArrayResize(A,6);
int x=X%10;
if(x==0 || x>6) returnfalse; // главное изменениеelse A[0]=x;
for(int i=1;i<6;i++)
{
X/=10;
x=X%10;
if(x==0 || x>6) returnfalse; // главное изменениеelse A[i]=x;
}
returntrue;
}
Ou talvez esteja tudo em C++? . Validar - uma função de parâmetro. Que tal a maneira antiquada... alocar memória e cache um bool para todos os valores válidos do argumento?
Eu não gosto de continuar e quebrar operadores, mas talvez eles possam ajudá-lo, especialmente porque um 36 vezes mais se no mql pode não funcionar
E acelerar Meu código pode ser quebrado se, consistindo de uma complexa condição de verificação de 36 entradas, em 36 ifs com uma condição simples! :)))
Acho que o código se aceleraria notavelmente, embora para ter certeza você precise entender as instruções da máquina, que são o resultado da compilação.
Eu corri seu código no MT5. Ele já tem avaliações curtas dos operadores lógicos já implementados (incorporados), portanto não há necessidade de quebrar o código em muitos "se".
No MT4 é diferente, esta otimização faz sentido lá. Mas eu fiz avaliação de tempo no MT5, por um curto esquema.
Acelerada por um fator de 4. Rewrote Validate().
Agora é assim:
WorkTime == 200 msHorrível, mas faz sentido otimizar o código da seguinte maneira. Muitas vezes mais rápido! E aqui o MT5 não vai ajudar mais.
Não é uma idéia, é claro. Mas eu me pergunto como isso vai funcionar rápido! :))
Também no código eu reduzi o intervalo dos valores divisores. 654321/2 = 327160,5...
Acelerada por um fator de 4. Rewrote Validate().
Agora é o que parece:
WorkTime == 200 msÉ lindo! Não como a minha.
Tenho uma idéia para escrever um algoritmo de divisão de colunas. Divida por dígitos, anote o restante da divisão e, quando o resultado for maior que 6, faça a operação contínua. Foi exatamente isso que fiz esta tarde, quando estava passando pelas cinco, dividi tudo em colunas. Mas é um longo tempo chegando! :))
É na representação do número hexadecimal que você precisa fazer a otimização, como você já fez.
Tenho uma idéia para escrever um algoritmo de divisão de colunas. Divida por dígitos, anote o restante da divisão e se corresponder ou o resultado for maior que 6, faça a operação contínua. Foi exatamente isso que fiz esta tarde, quando estava passando pelas cinco, dividi tudo em colunas. Mas é um longo tempo chegando! :))
É na representação de números de seis dígitos que precisamos otimizar, como você já fez.
О! Isso não é uma má idéia. Reescreveu-o novamente. WorkTime=125 ms.
О! Isso não é uma má idéia. Reescreva-o novamente. WorkTime=125 ms
Agora os jogadores de hóquei vão ficar definitivamente felizes! :)))) Mas não foi isso que eu quis dizer! ;D
Quanto o contador de tempo mostra pelo Meu código?
Eu entendo as mudanças. Apenas ainda não o dominei:
"É "|=" um OR lógico? O resto é um beco sem saída...
Agora os jogadores de hóquei ficarão felizes com certeza! :))))
Sim.
Seu novo código é ainda mais rápido, mas há alguns bugs lá.
O número de aparelho encaracolado não se somava. Mas eu acho que isso não é nada, pode ser corrigido apagando o último.
Explique o significado das linhas destacadas. Eu não entendo.
Sim.
Seu novo código é ainda mais rápido, mas há alguns bugs lá.
O número de aparelho encaracolado não se somava. Mas eu acho que não é nada, pode ser consertado apagando o último.
Explicar o significado de linhas separadas. Eu não entendo.
Exatamente... Mentira! :))) E parênteses parecem estar bem, eu copiei do código pronto.
É assim que deve ser:
Também na MQL5, ela vai acelerar um pouco a comparação:
Mas 125 ms claramente não está se recuperando.
Ou talvez esteja tudo em C++?
.
Validar - uma função de parâmetro.
Que tal a maneira antiquada... alocar memória e cache um bool
para todos os valores válidos do argumento?