Características da linguagem mql5, subtilezas e técnicas - página 240

 

A maneira mais produtiva e mais curta de determinar o dia da semana por hora:

uchar WhatWeekDay(datetime t) {
   return uchar(t/(24*60*60)+3 )%7+1;
}

retorna um valor entre 1 e 7

1 - Segunda-feira

...

7 - domingo

 
Nikolai Semko #:

7 - Domingo

Émais útil quando o domingo é zero.

 
fxsaber #:

Émais útil quando o domingo é zero.

talvez então:

uchar WhatWeekDay(datetime t) {
   return uchar(t/(24*60*60)+4 )%7;
}
 
Uma expressão matematicamente idêntica (destacada) pode produzir resultados diferentes na prática.
template <typename T>
T MathMin1( const T Num1, const T Num2 )
{
  return(Num1 < Num2 ? Num1 : Num2);    
}

template <typename T>
T MathMin2( const T Num1, const T Num2 )
{
  return(Num1 <= Num2 ? Num1 : Num2);    
}

void OnStart()
{
  Print(MathMin1(0.0, -0.0)); // -0.0
  Print(MathMin2(0.0, -0.0)); // 0.0
}
 
fxsaber # : Matematicamente, a mesma expressão (destacada) pode gerar resultados diferentes na prática.

Desde que os dois valores sejam iguais, qualquer um deles é um mínimo válido. Considere MathMin(1, 1), não há diferença se a função retorna o primeiro (1) ou o segundo (1).

Portanto, retornar 0,0 não é diferente de -0,0.

Edit: a propósito, as duas expressões destacadas NÃO são idênticas.
 
fxsaber #:
Matematicamente, a mesma expressão (destacada) pode dar resultados diferentes na prática.

Bem, são expressões diferentes, portanto, o resultado é diferente. O que há de errado aqui?

No primeiro caso: 0 < 0? Não. O segundo argumento é retornado.

No segundo caso: 0 <= 0? Sim. O primeiro argumento é retornado.

 
Ihor Herasko #:

São expressões diferentes

fxsaber #:
Matematicamente a mesma expressão
 
fxsaber #:

Os sinais < e <= parecem ser diferentes.....

 
Ihor Herasko #:

Os sinais < e <= parecem ser diferentes.....

Você se recusa a entender.

 
fxsaber #:

Você se recusa a entender.

Também não entendo por que as expressões destacadas são matematicamente iguais.