Hatalar, hatalar, sorular - sayfa 1128

 

"Normal" karşılaştırmalarda, imzasız bir türe dönüştürülür:

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

O zaman nasıl açıklanır:

 long t= 0 ;
   bool comp=( ULONG_MAX - 1 >t);
   Print ( "comp = " ,comp);   //comp = true
Bit düzeyinde karşılaştırma - çelişki yok. Ve sonra - ulong ve long'u karşılaştırmak yalnızca uzun < 0 ise yanlıştır
 
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            
}

Kontrol edilecek ilk döngü ifadesinde, int türünde bir değişken, uint türünde bir tamsayı sabitiyle karşılaştırılır:

Kapalı tür dönüştürme yoktur, bit düzeyinde karşılaştırma yapılır. İfade her zaman doğrudur.

İkinci döngüde test edilen ifadede, int türünde bir değişken, uint türünde bir değişkenle karşılaştırılır:

i değişkeni dolaylı olarak uint tipine dönüştürülür. Ve i değişkeninden sonra taşma: uint(-1)= 4294967295  

ifadesi yanlış olacaktır.


 

Dönem sonu ( UNIX?) 8 saat ertelendi:

tamsayı türleri

Tip

Bayt cinsinden boyut

Minimum değer

Maksimum değer

C ++ dilinde analog

tarih saat

sekiz

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
}
 

geliştiriciler,

ona MQL dilinin gramerlerinin resmi bir tanımını verin, booger'ları aramasına izin verin :-)))

 

Basit şey:

çift min,maks;

i=Bar-1- periyot1 ;
süre(maks-min==0)
{
min=Düşük[i];
maks=yüksek[i];
ben++;
}

TF: D1 ve M4'te hata ayıklayıcı min=Low[i]; satırını reddeder, terminal askıda kalır. Diğer TF'lerde bu sorun yok. min=iLow(); hiçbir şey vermez. Bana "deliğin" nerede olduğunu söyle: tarihte mi, yeni MT4 editöründe mi yoksa kafamda mı?

 
admoon :

Basit şey:

   double min,max;

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

TF: D1 ve M4'te hata ayıklayıcı min=Low[i]; satırını reddeder, terminal askıda kalır. Diğer TF'lerde bu sorun yok. min=iLow(); hiçbir şey vermez. Bana "deliğin" nerede olduğunu söyle: tarihte mi, yeni MT4 editöründe mi yoksa kafamda mı?

Lütfen forumda mesaj oluştururken kodu eklemek için "SRC" butonunu kullanın.


Bu, mesajlarınızın okunmasını kolaylaştıracaktır.

 
Fleder :

Dönem sonu ( UNIX?) 8 saat ertelendi:

Yardımda bir hata var gibi görünüyor.
 Print ( ulong (:: StringToTime ( "3000.12.31 23:59:59" ))); //32'535'215'999

ya da biz bir şey bilmiyoruz, sanki biri manuel olarak hesaplamış gibi https://www.mql5.com/en/forum/16036

 
A100 :
Görünüşe göre yardımda max=32'535'215'999 hatası var

Sadece tarih saat türünün sınırı yanlış tanımlanmış:

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

Sadece tarih saat türünün sınırı yanlış tanımlanmış:

3'535'244'799 != 3'535'215'999 - hangisi doğru?