O preço da lata != preço ? - página 3

 
WHRoeder:
Em muitos cálculos em vez da solução simples
Simples ou não, é determinado pelo código que precisa ser implementado em . . .
 
RaptorUK:

Cheguei a esta solução, que transforma as duplas em duplas, com o propósito de comparar as duplas. . .

Eu também cheguei a uma solução criativa que funcionou para mim (até agora) para comparar preços:

int ConvertToPoints (double _price) {
   double price_double = _price / Point;
   int price_int = MathRound(price_double);
      
   return (price_int);
}

Aumentei o preço para uma int que representa o preço como pontos expressos como um número inteiro. Assim:

ConvertToPoints(price) != ConvertToPoints(price)

nunca pode ser verdade.

 
CompareDoubles() do stdlib.mq4 está desqualificado para esta discussão? Funciona bem para mim se usado por preço.
 
Ovo:
CompareDoubles() do stdlib.mq4 está desqualificado para esta discussão? Funciona bem para mim se usado por preço.
Desqualificado ? não, mas tudo o que faz é uma comparação para igualdade.
 
Thirteen:
ConvertToPoints(price) != ConvertToPoints(price)

Uma divisão flutuante, adição flutuante, conversão para int, chamada de função (cópia, salto, retorno = 3,) * 2 todas as vezes dois. (18) E isso supondo que a divisão e a conversão estão em igualdade com as outras operações - não estão.

vs

if (MathAbs(a - b) > Point / 2.)

uma subtração, um teste, 1/2 negar (em média,) e comparação. (3 1/2 se o ponto/2 for feito no init e o ABS for substituído por um IF)

Não complique demais as coisas

Pode acionar quando igual devido ao arredondamento
if (a > b)
a é definitivamente maior que b
if (a - b > Point / 2.)
Pode acionar quando a é menor que b devido a arredondamento
if (a >= b)
a é definitivamente >= b
if (a - b > -Point/2.)
if (a > b -Point/2.)
if (a +Point/2. > b)
Acionará qualquer erro de arredondamento
if (a != b)
Definitivamente não é igual
if (MathAbs(a - b) > Point / 2.)
 
WHRoeder:

Uma divisão flutuante, adição flutuante, conversão para int, chamada de função (cópia, salto, retorno = 3,) * 2 todas as vezes dois. (18) E isso supondo que a divisão e a conversão estão em igualdade com as outras operações - não estão.

vs

uma subtração, um teste, 1/2 negar (em média,) e comparação. (3 1/2 se o ponto/2 for feito no init e o ABS for substituído por um IF)

Não complique demais as coisas

2013.04.03 17:39:12 TestSpeed-CompareDbls USDJPY,M5: MathAbs(a - b) 9000000 vezes em 266 ms.


2013.04.03 17:39:11 TestSpeed-CompareDbls USDJPY,M5: ConvertToPoints 9000000 vezes em 1887 ms.

2013.04.03 17:46:02 TestSpeed-CompareDbls USDJPY,M5: Flat(preço) 9000000 vezes em 3604 ms.

"O método "MathAbs(a-b)" é aproximadamente 7 vezes mais rápido que o método ConvertToPoints() e quase 14 vezes mais rápido que o meu método "Flat()

 
Para informação, com a MQL5, você pode sobrecarregar os operadores padrão, o que permite implementar soluções muito elegantes.
 
Eu testei (intRecord > preço/ponto) e
      intCheck = price /point;
      if (intRecord > intCheck) continue;

2013.04.04 14:27:38 TestSpeed-CompareDbls EURUSD,H4: MathAbs(a - b) HalfAPoint 99999999 vezes em 3403 ms.

2013.04.04 14:27:42 TestSpeed-CompareDbls EURUSD,H4: (intRecord > intCheck) 99999999 vezes em 2505 ms.

2013.04.04 14:27:40 TestSpeed-CompareDbls EURUSD,H4: intRecord > preço/ponto 9999999999 vezes em 1712 ms.

Mas a 3ª ordem não pode ser praticável, e a 2ª ordem (intRecord > intCheck) tinha 1 atribuição mais dentro para o intCheck antes da comparação.


 
rfb:
Eu testei (intRecord > preço/ponto) e

2013.04.04 14:27:38 TestSpeed-CompareDbls EURUSD,H4: MathAbs(a - b) HalfAPoint 99999999 vezes em 3403 ms.

2013.04.04 14:27:42 TestSpeed-CompareDbls EURUSD,H4: (intRecord > intCheck) 99999999 vezes em 2505 ms.

2013.04.04 14:27:40 TestSpeed-CompareDbls EURUSD,H4: intRecord > preço/ponto 9999999999 vezes em 1712 ms.

Mas a 3ª ordem não pode ser praticável, e a 2ª ordem (intRecord > intCheck) tinha 1 atribuição mais dentro para o intCheck antes da comparação.


O que é intRecord ?
 
O mesmo que "intCheck", mas com valor atribuído antes da função, como outras vars.