Um pouco surpreendido :) Pensei em partilhar e fazer uma pergunta NÃO retórica. - página 24

 
TheXpert:
Seria perfeito testá-lo na EMA.

Ahem... Acho que isso já não é necessário. A situação tornou-se mais clara. Como é costume neste fio - um pouco surpreendido e pensei partilhar... :)

Aqui está um extracto do teste, o teste completo está no reboque, a biblioteca também está lá:

..........
....................
    IntRational ira={2345,3456};
    IntRational irb={67,93};
    IntRational irc={93,67};
    t = GetTickCount();
    for(int i=0;i<Count;i++)
      {
       ira.Div(irb); ira.Div(irc);
       ira.Mul(irb); ira.Mul(irc);
       ira.Add(irb); ira.Add(irc);
       ira.Sub(irb); ira.Sub(irc);
       ira.Norm();
      }
    Print("Common time IntRational test = ", GetTickCount()-t, " ms; // ",Count," calls");
    double da=2345.0/3456.0;
    double db=67.0/93.0;
    double dc=93.0/67.0;
    t = GetTickCount();
     for(int i=0;i<Count;i++)
      {
       da/=db; da/=dc;
       da*=db; da*=dc;
       da+=db; da+=dc;
       da-=db; da-=dc;
      }
    Print("Common time double test = ", GetTickCount()-t, " ms; // ",Count," calls");
..................
......

Resultados:

2011.04.04 20:29:15 RationalSpeedTest (EURUSD,M20) Teste comum de tempo int = 62 ms; // 1000000 chamadas
2011.04.04 20:29:15 RationalSpeedTest (EURUSD,M20) Teste longo de tempo comum = 141 ms; // 1000000 chamadas
2011.04.04 20:29:15 RationalSpeedTest (EURUSD,M20) Teste duplo de tempo comum = 62 ms; // 1000000 chamadas
2011.04.04 20:29:15 RationalSpeedTest (EURUSD,M20) Tempo comum IntRational test = 1032 ms; // 1000000 chamadas
2011.04.04 20:29:14 RationalSpeedTest (EURUSD,M20) Teste LongRational de tempo comum = 921 ms; // 1000000 chamadas

Fiquei muito perplexo: duplo e int absolutamente compatível com a velocidade das operações aritméticas e, além disso, longo foi o mais rápido, Rational foi completamente aparafusado.

À luz destas experiências, sinto-me um pouco relutante em construir um testador de números inteiros. :-))

Talvez com outros processadores os resultados sejam um pouco diferentes (ficarei grato a quem os testar e carregar), mas não posso acreditar em grandes diferenças.

Curiosamente, uma vez nos anos 90 não esquecidos, testei a diferença entre operações inteiras e operações de ponto flutuante, as diferenças eram bastante perceptíveis (para o dizer de forma suave).

Resumo - Os anos 90 acabaram e desapareceram, a aritmética de ponto flutuante funciona muito rapidamente hoje em dia.

Mesmo mudá-lo para aritmética inteira não é razoável (no contexto comercial) - o ganho é insignificante, se não ilusório.

O currículo final - se a Intel não fizer urgentemente apoio à aritmética racional a nível do ferro, já não tem de se preocupar mais com isso... pelo menos em termos de desempenho. :)

Ámen.

// Vou repetir. Os testes foram efectuados num único PC marmota, portanto, para evitar cair em ilusões, gostaria de pedir a todos que efectuassem o teste nos seus computadores e afixassem os resultados com indicação dos parâmetros do ferro.

// O meu computador: 2 gigs de RAM, Sempron 3100+ CPU 2.2 gigahertz, 32 bit, sistema operativo WinXP

Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
  • www.mql5.com
Основы языка / Операции и выражения / Арифметические операции - Документация по MQL5
Arquivos anexados:
 
MetaDriver:

Ahem... Acho que isso já não é necessário. A situação tornou-se mais clara. Como é costume neste fio - um pouco surpreendido e pensei partilhar... :)



99% das deduções não exigirão um denominador comum, pelo que os testes não são inteiramente correctos. É preciso fazer os cálculos reais e fazê-los correctamente. Inty de acordo com as minhas estimativas é 1000000 vezes mais rápido (e devido ao facto de que tudo na memória e na cache da CPU) :) Os resultados são simplesmente espantosos. Como 2000 funciona em 1 segundo. :)

 
MetaDriver:

Resumo - Os anos 90 já passaram, a aritmética de ponto flutuante funciona muito rapidamente hoje em dia.

Mesmo mudá-lo para aritmética inteira não é razoável (no contexto do comércio) - o ganho é insignificante, se não mesmo ilusório.

Aqueles que têm programado nos últimos ...trinta anos já o sabem há muito tempo.

Além disso, não é por nada que mudámos para SSE2, pois sem ele não há nenhuma melhoria geral de desempenho.

 
Renat:

Quem programou durante os últimos ...centenas de anos, já o conhece há muito tempo.

Não é por nada que mudámos para SSE2, porque sem ele não veremos qualquer melhoria global de desempenho.

Embalei uma carraça em 32 bits (asc, bid e tempo). E eu tenho velocidade, que já é utilizável.

:) Além disso, não corro por memória como o MT5 - todas as variantes da pesquisa vão à volta da barra, e não o contrário. :) Voar!!! :)

**

A propósito, se não for muito difícil fazê-lo no MT, escrevi lá acima.

 
Academic:
Coloco um tick em 32 bits ( asc, bid e tempo ) . E recebi um aumento de velocidade, que já é utilizável.

Pode-se fazer muito mais do que isso num sonho... Só a prática me acorda e estraga tudo.

Mas nada, esta noite vai haver um novo voo de fantasia!

 
Renat:

Pode fazer muito mais do que isso durante o sono... Só a prática me acorda e estraga tudo.

Mas nada, hoje à noite será um novo voo de fantasia!

Não se tem medo de ser poluído. Não estou a mentir. :) É fácil de encher, basta pensar no assunto. Sim... Estou espantado com a auto-confiança durante o sono. :)
 
Academic:
Não se tem medo de ser poluído. Não estou a mentir. :) É fácil de encher, basta pensar no assunto. Sim... Estou espantado com a auto-confiança durante o sono. :)

Eu não continuo a dizer "praticar" por nada.

Há muito tempo que temos vindo a fazer um empacotamento extremo, bit a bit, de citações quando transmitimos através da rede e com sucesso. A compressão média é de 1:13, quando 10 anos de um minuto de história são comprimidos em 10-12 mb.

Mas a prática é que a compressão (para não mencionar as operações matemáticas sobre eles) desta confusão demora tanto tempo que a velocidade está fora de questão.

 
Renat:

Eu não continuo a dizer "praticar" por nada.

Temos uma longa e bem sucedida história de empacotamento extremo bit a bit de citações quando transmitidas através da rede. A compressão média é de 1:13, onde 10 anos de um minuto de história são comprimidos em 10-12 mb.

Mas a prática é que a compressão (para não mencionar as operações matemáticas sobre eles) desta confusão demora tanto tempo que a velocidade está fora de questão.

Digo-lhe - precisa de ter experiência na programação de aplicações de alto desempenho. Não é preciso ser um teórico, não é preciso ser mais lento a perceber estes 32 bits do que cinco comandos de máquina.
 
MetaDriver:
...

Ámen.

// Repito. Os testes foram executados num computador separado, por isso, para não cair em ilusões supérfluas, peço àqueles dispostos a executar o teste nos seus computadores e afixar os resultados com indicação dos parâmetros de hardware.

// O meu computador: 2 Gigs de RAM, processador Sempron 3100+ 2,2 GHz, 32 bit, sistema operativo WinXP

Foi o que disseram também os duros lenhadores siberianos :o)

2011.04.04 20:30:59     RationalSpeedTest (USDCHF,M1)   Common time int test = 78 ms; // 1000000 calls
2011.04.04 20:30:59     RationalSpeedTest (USDCHF,M1)   Common time long test = 125 ms; // 1000000 calls
2011.04.04 20:30:59     RationalSpeedTest (USDCHF,M1)   Common time double test = 94 ms; // 1000000 calls
2011.04.04 20:30:59     RationalSpeedTest (USDCHF,M1)   Common time IntRational test = 1391 ms; // 1000000 calls
2011.04.04 20:30:58     RationalSpeedTest (USDCHF,M1)   Common time LongRational test = 1015 ms; // 1000000 calls
P4 3 Гц [32 бита] 1Гб оперативы, ОС: Windows XP SP 3 версия 5.1 сборка 2600  

Dê-me outro zero em Contagem para maior clareza

2011.04.04 20:39:22     RationalSpeedTest (USDCHF,M1)   Common time int test = 718 ms; // 10000000 calls
2011.04.04 20:39:22     RationalSpeedTest (USDCHF,M1)   Common time long test = 1266 ms; // 10000000 calls
2011.04.04 20:39:20     RationalSpeedTest (USDCHF,M1)   Common time double test = 1000 ms; // 10000000 calls
2011.04.04 20:39:19     RationalSpeedTest (USDCHF,M1)   Common time IntRational test = 13156 ms; // 10000000 calls
2011.04.04 20:39:06     RationalSpeedTest (USDCHF,M1)   Common time LongRational test = 9282 ms; // 10000000 calls
 
2011.04.04 22:36:01    RationalSpeedTest (EURUSD,H1)    Common time int test = 63 ms; // 1000000 calls
2011.04.04 22:36:01    RationalSpeedTest (EURUSD,H1)    Common time long test = 94 ms; // 1000000 calls
2011.04.04 22:36:01    RationalSpeedTest (EURUSD,H1)    Common time double test = 47 ms; // 1000000 calls
2011.04.04 22:36:01    RationalSpeedTest (EURUSD,H1)    Common time IntRational test = 734 ms; // 1000000 calls
2011.04.04 22:36:00    RationalSpeedTest (EURUSD,H1)    Common time LongRational test = 594 ms; // 1000000 calls
AMD Phenom 9850 Quad-Core (2.5GHz), 2Gb, WinXP SP3 32
Razão: