Características del lenguaje mql5, sutilezas y técnicas - página 240

 

La forma más productiva y corta de determinar el día de la semana según la hora:

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

devuelve un valor entre 1 y 7

1 - lunes

...

7 - Domingo

 
Nikolai Semko #:

7 - Domingo

Esmás útil cuando el domingo es cero.

 
fxsaber #:

Esmás útil cuando el domingo es cero.

tal vez entonces:

uchar WhatWeekDay(datetime t) {
   return uchar(t/(24*60*60)+4 )%7;
}
 
Una expresión matemáticamente idéntica (resaltada) puede producir resultados diferentes en la práctica.
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 # : Matemáticamente, la misma expresión (resaltada) puede dar resultados diferentes en la práctica.

Mientras las dos cantidades sean iguales, cualquiera de ellas es un mínimo válido. Considere MathMin(1, 1), no difiere si la función devuelve el primero (1) o el segundo (1).

Por lo tanto, devolver 0.0 no es diferente de -0.0.

Edición: por cierto, las dos expresiones resaltadas NO son idénticas.
 
fxsaber #:
Matemáticamente, la misma expresión (resaltada) puede dar resultados diferentes en la práctica.

Bueno, son expresiones diferentes, así que el resultado es diferente. ¿Qué está mal aquí?

En el primer caso: ¿0 < 0? No. Se devuelve el segundo argumento.

En el segundo caso: ¿0 <= 0? Sí. Se devuelve el primer argumento.

 
Ihor Herasko #:

Son expresiones diferentes

fxsaber #:
Matemáticamente la misma expresión
 
fxsaber #:

Los signos < y <= parecen ser diferentes.....

 
Ihor Herasko #:

Los signos < y <= parecen ser diferentes.....

Te niegas a entender.

 
fxsaber #:

Te niegas a entender.

Yo tampoco entiendo por qué las expresiones resaltadas son matemáticamente iguales.

Razón de la queja: