Erreurs, bugs, questions - page 1125

 
A100:

Probablement une erreur de calcul (MT\930\32)

Je ne l'ai pas calculé moi-même, mais avec i pair -> j = -1, et le dernier i=18446744073709551615/*ULONG_MAX */-1-> pair

J'ai essayé votre script.

Le débranchement se produit en un instant à partir du moment où l'on rejoint le graphique. On a l'impression qu'aucun contrôle n'est transmis à la boucle.

 
Fleder:

On a l'impression que le contrôle n'est pas du tout transféré à la boucle.

C'est vraiment le cas, mais c'est rapide :)
 
void OnStart()
{
        int j = 1;
        for ( int i = 0; i < INT_MAX; i++ )
                j = -j;
        Print( "j=", j );
}
C'est beaucoup plus lent...
 
A100:
C'est vrai, mais c'est rapide :)

Si je me souviens bien, les versions précédentes du compilateur se plaignaient quand j'essayais de mettre

trop d'itérations dans la boucle (LONG_MAX et ULONG_MAX) et maintenant le compilateur reste silencieux...

J'ai la version 910 32 bit.

 

Il est tout de même silencieux et "rapide à compter" :

void OnStart()
{
        int j = 1;
        for ( int i = 0; i < ULONG_MAX; i++ )
                j = -j;
        Print( "j=", j );
Bien que, supposément, il devrait tomber dans une boucle infinie.
 

Il jure quand il n'y a pas besoin de jurer, et quand il y a besoin de jurer, il se tait.

Leurs manières !

 
Fleder:

Si je me souviens bien, les versions précédentes du compilateur se plaignaient quand j'essayais de mettre

trop d'itérations dans la boucle (LONG_MAX et ULONG_MAX), mais le compilateur ne dit plus rien...

En général, le compilateur ne peut pas connaître le nombre d'itérations.

int f( ulong max )
{
        int j = 1;
        for ( ulong i = 0; i < max; i += ULONG_MAX )
                j = 0;
        return ( j );
}
void OnStart()
{
        ulong max = ULONG_MAX;
        Print( "j=", f( max )); //результат j=1, а должно быть j=0
}
 
A100:

En général, le compilateur ne peut pas connaître le nombre d'itérations

Ce qui est vrai est vrai. Donc c'est une erreur d'exécution.
 
Peut-être que l'instruction for n'aime pas les nombres de 8 octets dans une expression testée ?
 

Je suis en train d'écrire un cahier des charges pour un EA MT4 avec une priorité sur le traitement accéléré des données.

Veuillez indiquer si la séquence des calculs ou l'échantillonnage (quel est le nom correct - représentatif ?) sont importants pour l'accélération.

Je joins deux variantes sous forme de photos montrant des schémas de principe.

Si vous pouvez, s'il vous plaît, écrire comment le code devrait ressembler si l'exécution sélective des blocs sera - une disposition purement primitive, et cela donnera-t-il une augmentation significative de la vitesse !

Dossiers :
Logic_V_01.png  26 kb
Logic_V_02.png  30 kb