Implementações alternativas de funções/abordagens padrão - página 6

 
fxsaber:

Mesmo os analógicos são extremamente divergentes em termos de desempenho. O número de pessoas que podem escrevê-las ou encontrá-las é inferior a uma porcentagem de usuários.

Bem, isso porque o resto das pessoas está bastante satisfeito com o desempenho disponível ) Na verdade, falando francamente, a maioria dessas velocidades são apreciáveis apenas em medições de teste isoladas.

É claro que eu não defendo que devemos lutar pela perfeição, mas é melhor fazê-lo por ordem de prioridades.

 
Alexey Navoykov:

Porque outras pessoas estão bastante satisfeitas com o desempenho disponível ) Afinal, a maioria dessas velocidades só são perceptíveis em medições de teste isoladas.

Mesmo um ganho de 1% em Otimização produz resultados tangíveis.

Eu certamente não defendo que você deve lutar pela perfeição, mas é aconselhável que o faça por ordem de prioridade.

Para MQ você é menos interessante que todo o exército de espertalhões MT4 que, por várias razões, não mudaram para 5.

 
Библиотеки: Fast iBarShift and Bars for MT5
Библиотеки: Fast iBarShift and Bars for MT5
  • 2018.05.04
  • www.mql5.com
Fast iBarShift and Bars for MT5: Автор: Nikolai Semko...
Arquivos anexados:
iBars.mqh  14 kb
 

Análogos mais rápidos de funções padrão ceil(), floor(),round()

2-2,5 vezes a vantagem da velocidade

long Ceil (double x) { return (x-(long)x>0)?(long)x+1:(long)x; }
long Round(double x) { return (x>0)?(long)(x+0.5):(long)(x-0.5);}
long Floor(double x) { return (x>0)?(long)x:((long)x-x>0)?(long)x-1:(long)x; }

Resultados dos testes de correção e velocidade:

2018.08.25 17:23:23.199 TestRound (EURUSD,M10)  Время выполнения ceil =  3.745 наносекунд, Контрольная сумма = 5250492895
2018.08.25 17:23:23.200 TestRound (EURUSD,M10)  Время выполнения Ceil =  1.806 наносекунд, Контрольная сумма = 5250492895
2018.08.25 17:23:23.205 TestRound (EURUSD,M10)  Время выполнения floor = 4.243 наносекунд, Контрольная сумма = 5249492896
2018.08.25 17:23:23.206 TestRound (EURUSD,M10)  Время выполнения Floor = 1.621 наносекунд, Контрольная сумма = 5249492896
2018.08.25 17:23:23.209 TestRound (EURUSD,M10)  Время выполнения round = 2.984 наносекунд, Контрольная сумма = 5249992896
2018.08.25 17:23:23.211 TestRound (EURUSD,M10)  Время выполнения Round = 1.519 наносекунд, Контрольная сумма = 5249992896
As funções padrão retornam tipo duplo. Mas eu não o repeti porque não entendo porque as funções arredondadas precisam do tipo duplo.
Arquivos anexados:
TestRound.mq5  5 kb
 
Nikolai Semko:

os resultados do teste de exatidão e velocidade:

Apenas não nano, mas milhas.

 
fxsaber:

Só que eles não são nano, são milhas.

Sem nano. 1000000 passes, e eu o divido por 1000.
Somente eles são ainda mais rápidos, pois são contados juntamente com todo o conteúdo do passe do laço. Chegarei ao meu computador em 3 horas e consertarei o cálculo do tempo de execução somente para estas funções.
 
Nikolai Semko:
Sem nano. 1000000 passes, e eu o divido por 1000.
Uma interpretação ambígua, então. Decidiu produzir o tempo de ciclo, não o tempo médio por chamada de função.
 
fxsaber:
Interpretação ambígua, então. Decidiu produzir o tempo de ciclo, não o tempo médio de uma chamada de função.
Sim, desta vez ainda inclui o tempo para fazer três acréscimos e 1 verificação.
Vou consertar isso, porque sei como. Portanto, o ganho será ainda maior.
 
Nikolai Semko:
As funções padrão retornam tipo duplo. Mas eu não o repeti porque não entendo porque as funções arredondadas precisam do tipo duplo.

Porque converter o dobro para o inteiro (desta forma) é um código de merda. A rodada com amigos não foi projetada para obter o tipo inteiro do tipo flutuante.