Erreurs, bugs, questions - page 1261

 

Erreurs dans les opérations binaires.

Print(int(1)<<34);

Nous obtenons 4, ce qui devrait être 0. Combien d'années de polissage de MT, et toujours de telles bévues.

 

Et quoi, le compilateur n'a pas juré sur cet offset ? J'en doute.

Bref, c'est ce que nous voulions.

00000000000000000000000000000001 << 34
00000000000000000000000000000100
 
GVladimir:

Et quoi, le compilateur n'a pas juré sur cet offset ? J'en doute.

Bref, c'est ce que nous voulions.

Vous ne connaissez manifestement pas très bien le fonctionnement des décalages de bits. Rien ne peut s'y produire dans les bits de poids faible. En cas de doute, le C++ est votre aide.
 
meat:
Rien ne peut s'y produire dans les bits de poids faible.
Dans MQL, je pense que tous les décalages de bits sont implémentés comme cycliques (ROL/ROR), (ce que vous ne savez probablement pas, car ni le C ni le C++ n'en disposent) juste pour de telles situations.
 
GVladimir:
Dans MQL, je crois que tous les décalages de bits sont implémentés comme des décalages cycliques (ROL/ROR), (que vous ne connaissez probablement pas, car ni le C ni le C++ n'en ont) juste pour de telles situations.

La documentation MQL ne dit rien sur un décalage cyclique, donc le décalage habituel est supposé. Mais j'y ai trouvé la phrase suivante

Il n'est pas recommandé de décaler un nombre de bits supérieur ou égal au nombre de bits de la variable à décaler, car le résultat de cette opération est indéfini.

Ceci est incorrect. Il ne peut y avoir de résultat indéfini dans les opérations de type bit. C'est juste que le bit sortant est soit stocké dans un drapeau spécial, soit non stocké, mais cela n'a aucun effet sur l'algorithme de décalage, c'est-à-dire que les bits de droite sont de toute façon remplis de zéros. S'il s'agit d'un décalage cyclique, cela doit être explicitement indiqué (bien qu'un décalage normal compatible C++ serait plus correct).

 

est-il possible de connecter un indicateur compilé par l'ancien build comme une ressource à un autre indicateur ?

Je n'arrive pas à le faire fonctionner comme ça :

........ 

#resource "\\Indicators\\тфьу.ex4"

........ 

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

  {

........ 

ExtLimeBuffer[i]=iCustom(_Symbol,0,"::Indicators\\тьфу.ex4",pr1,pr2,pr3,pr4,pr5,pr6,pr7,2,i);

........ 

  return(rates_total);

}


 

le compilateur dit ceci :

unknown resource type 'C:\Program Files\MT4\MQL4\Indicators\тфьу.ex4' тфьу1.mq4 10 1

 

 


 
meat:

La documentation MQL ne dit rien sur un décalage cyclique, elle suppose donc un décalage normal. Cependant, j'y ai trouvé une phrase de ce genre :

Ceci est incorrect. Il ne peut y avoir de résultat indéfini dans les opérations de type bit. C'est juste que le bit sortant est soit stocké dans un drapeau spécial, soit non stocké, mais cela n'affecte pas l'algorithme de décalage, c'est-à-dire que les bits de droite sont de toute façon remplis de zéros. S'il s'agit d'un décalage cyclique, vous devez le spécifier explicitement (bien qu'un décalage compatible avec plain++ serait plus correct).

C'est possible.

Un maximum de 5 bits pour les entiers de 32 bits (ou 6 bits pour les entiers de 64 bits) doit être impliqué dans les opérations de décalage. Si une valeur de décalage prend plus de 5 (ou 6) bits, les différents processeurs traitent cette situation différemment. Dans la documentation, nous avons juste reflété ce fait en disant que le résultat de l'opération est indéfini.

Документация по MQL5: Торговые функции / OrderCalcProfit
Документация по MQL5: Торговые функции / OrderCalcProfit
  • www.mql5.com
Торговые функции / OrderCalcProfit - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
sanyooooook:

...
le compilateur écrit comme ceci :

unknown resource type 'C:\Program Files\MT4\MQL4\Indicators\тфьу.ex4' тфьу1.mq4 10 1

Apparemment, le compilateur est plus intelligent qu'il n'y paraît. Il veut trouver le code source de tfu1.mq4 et le joindre comme ressource.
 
fyords:
Apparemment, le compilateur est plus intelligent qu'il n'y paraît. Il veut trouver la source de tfu1.mq4 et l'attacher comme ressource.
Excusez-moi. Quel est le rapport entre le code source et la ressource ex4 ? Lors de la compilation de tfu1.mq4, le tfu.ex4 correspondant n'existe pas encore.
Raison: