Errores, fallos, preguntas - página 1128

 

En las comparaciones "normales", se da al tipo sin signo:

void OnStart()
{
  ulong i=0;
  while(true)
  {
    if(i<ULONG_MAX) {i++;}  //тут в условии так и остаётся тип ulong, преобразования к long не происходит
    else {break;}
  }
}
 
Fleder:

Entonces, ¿cómo lo explicas?

long t=0;
  bool comp=(ULONG_MAX-1>t);
  Print("comp = ",comp);   //comp = true
Comparación bit a bit: no hay contradicción. Y entonces - comparar ulong y long sólo es incorrecto si long < 0
 
void OnStart()
{
  long n=0;
  uint g=UINT_MAX;
//for(int i=0;i<UINT_MAX;i++) {n++;}  //здесь получаем бесконечный цикл и предупреждение expression is always true
  for(int i=0;i<g;i++) {n++;}         //здесь получаем предупреждение sign mismatch и цикл в 4294967295 итераций
  Print("n = ",n);                    //n = 4294967295            
}

En la expresión probada del primer bucle, se compara una variable de tipo int con una constante entera de tipo uint:

no hay conversión de tipos implícita, se realiza una comparación a nivel de bits. La expresión es siempre cierta.

En la expresión del segundo bucle que se comprueba, se compara una variable de tipo int con una variable de tipo uint:

se realiza una conversión implícita de la variable i al tipo uint. Y tras el desbordamiento de la variable i: uint(-1)= 4294967295

la expresión será falsa.


 

El fin de una era(¿UNIX?)se retrasa 8 horas:

Tipos enteros

Tipo

Tamaño en bytes

Valor mínimo

Valor máximo

Analógico en C++

datetime

8

0 (1970.01.01 0:00:00)

32 535 244 799 (3000.12.31 23:59:59)

__time64_t

void OnStart()
{
  Print((datetime)32535244799);   //3001.01.01 07:59:59
}
 

Los promotores,

Dale una descripción formal de la gramática MQL, que busque los mocos :-)))

 

Algo sencillo:

double min,max;

i=Bars-1-period1;
while(max-min==0)
{
min=Low[i];
max=High[i];
i++;
}

En TF: D1 y M4 el depurador rechaza la línea min=Low[i]; el terminal se "cuelga". En otros TF este problema no existe. Sustituir por min=iLow(); no hace nada. Por favor, avisa, ¿dónde está el "agujero": en el historial, en el nuevo editor de MT4 o en mi cabeza?

 
admoon:

Cosas sencillas:

   double min,max;

   i=Bars-1-period1;
   while(max-min==0)
     {
      min=Low[i];
      max=High[i];
      i++;
     }

En TF: D1 y M4 el depurador rechaza la línea min=Low[i];, el terminal se "cuelga". En otros TF este problema no existe. El reemplazo en min=iLow(); no me da nada. Por favor, avisen dónde está el "agujero": ¿en el historial, en el nuevo editor de MT4 o en mi cabeza?

Por favor,utilice el botón "SRC" al crear un mensaje en el foro para insertar el código


Esto facilitará la lectura de sus mensajes.

 
Fleder:

El fin de una era(¿UNIX?)se retrasa 8 horas:

Debe haber un error en la ayuda
Print( ulong(::StringToTime( "3000.12.31 23:59:59" ))); //32'535'215'999

O no sabemos algo, creo que alguien incluso lo contó a mano aquí https://www.mql5.com/en/forum/16036

 
A100:
Aparentemente hay un error en la ayuda max=32'535'215'999

Es que el límite para el tipo datetime no está definido correctamente:

void OnStart()
{
  Print((datetime)32535244799);   //3001.01.01 07:59:59
  Print((datetime)32535244800);   //wrong datetime
}
 
Fleder:

El límite para el tipo datetime simplemente no está definido correctamente:

32'535'244'799 != 32'535'215'999 - ¿Cuál es el correcto?