Erreurs, bugs, questions - page 1128

 
Fleder:

Alors comment l'expliquez-vous :

long t=0;
  bool comp=(ULONG_MAX-1>t);
  Print("comp = ",comp);   //comp = true
Comparaison par bit - il n'y a pas de contradiction. Et ensuite - comparer ulong et long n'est incorrect que 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            
}

Dans l'expression testée de la première boucle, une variable de type int est comparée à une constante entière de type uint :

il n'y a pas de conversion de type implicite, une comparaison par bit est effectuée. L'expression est toujours vraie.

Dans l'expression de la deuxième boucle en cours de vérification, une variable de type int est comparée à une variable de type uint :

une conversion implicite de la variable i au type uint est effectuée. Et après le débordement de la variable i : uint(-1)= 4294967295

l'expression sera fausse.


 

La fin d'une époque(UNIX ?)est retardée de 8 heures:

Types entiers

Type

Taille en octets

Valeur minimale

Valeur maximale

Analogique 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
}
 

Les développeurs,

Donnez-lui une description formelle de la grammaire MQL, et laissez-le chercher des crottes de nez :-))))

 

Une chose simple :

double min,max ;

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

Sur TF : D1 et M4 le débogueur rejette la ligne min=Low[i] ; le terminal "raccroche". Sur d'autres TF, ce problème n'existe pas. Remplacer par min=iLow() ; ne fait rien. S'il vous plaît, dites-moi où se trouve le "trou" : dans l'historique, dans le nouvel éditeur MT4 ou dans ma tête ?

 
admoon:

C'est simple :

   double min,max;

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

Sur TF : D1 et M4 le débogueur rejette la ligne min=Low[i] ;, le terminal "raccroche". Sur d'autres TF, ce problème n'existe pas. Le remplacement sur min=iLow() ; ne me donne rien. S'il vous plaît, dites-moi où se trouve le "trou" : dans l'historique, dans le nouvel éditeur MT4 ou dans ma tête ?

Veuillezutiliser le bouton "SRC" lorsque vous créez un message dans le forum pour insérer le code.


Cela facilitera la lecture de vos messages.

 
Fleder:

La fin d'une époque(UNIX ?)est retardée de 8 heures :

Il doit y avoir une erreur dans l'aide
Print( ulong(::StringToTime( "3000.12.31 23:59:59" ))); //32'535'215'999

Ou nous ne savons pas quelque chose, je pense que quelqu'un a même compté à la main ici https://www.mql5.com/en/forum/16036.

 
A100:
Apparemment il y a une erreur dans l'aide max=32'535'215'999

C'est juste que la limite pour le type datetime n'est pas définie correctement :

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

La limite pour le type datetime n'est tout simplement pas définie correctement :

32'535'244'799 != 32'535'215'999 - lequel est correct ?
 

A100:
32'535'244'799 != 32'535'215'999 - какое правильное? 

Le bon serait 32'535'215'999 pour"3000.12.31 23:59:59".

Et32'535'244'799 serait correct pour"3001.01.01 07:59:59".

Raison: