Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Acho que é uma boa combinação para as bandeiras:
http://osinavi.ru/asm/4.php
e para os operadores/comparações desnecessárias...
Volto à minha diferença incompreendida no tempo de execução de quase 100% idêntica na lógica e no número de verificações e somas de dois loops:
Já escrevi acima - tenho menos operações de comparação em meu código...
-----
De fora da escola, em algum lugar da década de 90:
1) se (condições) A,B,C forem independentes, então você tem que enfiá-las na função AND à medida que a probabilidade aumenta, e na função OR à medida que ela diminui.
e se forem dependentes, não devem ser combinados em uma única expressão (isto é, fazer se (A &&B) ).
2) Se houver laços aninhados A,B, então o anel externo deve ser mais curto
3) Se houver uma condição dentro do laço, você deve dividir o laço e levar a condição para fora dele, se possível.
Já escrevi acima - tenho menos operações de comparação em meu código...
-----
de estudos fora da escola, em algum lugar na década de 90:
1) se (condições) A,B,C forem independentes, então eles devem ser colocados em AND por aumentar a probabilidade, e em OR por diminuir a probabilidade.
e, se dependentes, não podem ser combinados em uma expressão (isto é, fazer se (A &&B) ).
2) Se houver laços aninhados A,B, então o anel externo deve ser mais curto
3) Se houver uma condição dentro do laço, você deve dividir o laço e levar a condição para fora, se possível.
1) vice versa, que é exatamente o que você fez. Se a primeira condição em um complexo E operador não for executada, por que devemos verificar todas as outras condições? Portanto, primeiro verificamos a condição que provavelmente é falsa.
Embora, sim - é: classificando através do aumento da probabilidade de declarações de verdade em uma condição composta.
1) o contrário, o que você já fez. Peculiaridades de execução de operadores condicionais em C.
Talvez eu tenha escrito errado, mas é mais fácil explicar para todos ao mesmo tempo...
A & & & B & & C
E deve ser observado o mais rápido possível para evitar tentar todas as outras condições. O otimizador não o fará para o programador (*), já que ele não sabe em quais dados o programa será executado.
A || B || C
aqui é vice-versa :-) porque é aritmética booleana. !(((!A)&&(!B)&&(!C) ) (se você não estragar os parênteses, assine novamente)
(*) Os compiladores otimizadores podem contar com o fato de que as condições são estabelecidas exatamente assim e eles constroem sua cozinha interna com base nestas suposições
Talvez esteja mal escrito, mas faz mais sentido para todos ao mesmo tempo...
A & & & B & & C
E deve ser observado o mais rápido possível para não passar por todas as outras condições. Significa que o primeiro predicado a ser colocado é aquele que falhará em executar toda a cadeia seguinte. O otimizador não o fará para o programador (*) porque ele não sabe em que dados o programa será executado
A || B || C
é o contrário :-) porque a aritmética booleana... !(((!A)&&(!B)&&(!C) ) (se novamente entre parênteses, os sinais não são confundidos)
(*) Os compiladores otimizadores podem contar com o fato de que as condições são estabelecidas exatamente assim e eles constroem sua cozinha interna com base nestas suposições
Concordo plenamente.
Volto à minha diferença incompreendida no tempo de execução de quase 100% idêntica na lógica e no número de verificações e somas de dois loops:
Então, mais uma vez, por que uma tal variante do código de Kuznetsov:
funciona mais que o dobro da velocidade daquele que faz absolutamente a mesma coisa:
Quais são as maravilhas do compilador?
Será realmente possível um projeto desse tipo?
o compilador encontra algum comando especial de busca da montadora para o processador? Mas há uma verificação adicional i<j dentro, não há?
Porque a mesma coisa é executada muito mais lentamente:
O código do roteiro de demonstração está anexado
É assim que acontece com freqüência. Você está ocupado com algumas porcarias desnecessárias e descobre algo bastante interessante.
Desenvolvedores, vocês poderiam dar uma olhada no código executável e ver o que faz essa diferença?
Você precisa entender a lógica do compilador para criar algoritmos mais otimizados no futuro.
Que situação estranha em geral. Acho que muitas coisas dependem do compilador e da máquina em que estou testando. Aqui está meu resultado de seu exemplo em uma máquina de 32 bits
como você pode ver, não há nenhuma vantagem em particular. E aqui está um teste das funções de eliminação da matriz da última variante.
Às vezes, durante os testes os resultados podem ser bem diferentes dos anteriores, e não está claro por que, talvez tenha algo a ver com algum sistema específico de interrupção no processamento do código MQL
ao testar algoritmos, deve-se tomar
* ou conjuntos de dados pré-preparados (mais ou menos semelhantes aos que são realmente necessários),
* ou fazer um número muito significativo de passes sobre o RNG,
em testes:
* alternar/desacordar a seqüência de testes e
* observar as pausas e reiniciar todos os tipos de caches
ao testar algoritmos, deve-se tomar
* ou conjuntos de dados pré-preparados (mais ou menos semelhantes aos que são realmente necessários),
* ou fazer um número muito significativo de passes sobre o RNG,
em testes:
* sequência de teste alternado/suflado e
* observar pausas e despejar todos os tipos de caches
bem, como se utilizássemos dados pré-preparados. Para todas as funções, os mesmos dados são usados para o teste. Quanto ao embaralhamento/queueing, sim, notei uma diferença se você mudar a ordem dos testes. Mas como reiniciar as caches ?
ao testar algoritmos, deve-se tomar
* ou conjuntos de dados pré-preparados (mais ou menos semelhantes aos que são realmente necessários),
* ou fazer um número muito significativo de passes sobre o RNG,
em testes:
* seqüências de testes alternados/sufláveis e
* observar pausas e despejar todos os tipos de caches
Não faça troça das pessoas