Erreurs, bugs, questions - page 2221

 
elibrarius:

Examen du code du paquet Alglib. Il est plein de ces constructions, ce qui rend le code plus difficile à lire:

N'est-ce pas plus simple comme ça ?

Il me semble que la vitesse d'exécution serait encore plus élevée.

Pourquoi ont-ils rendu le code si compliqué ? Ou bien ils l'ont simplement porté d'une autre langue sans aucune modification ? Mais je me demande toujours pourquoi une telle complication dans l'original ?

Cela est très probablement fait dans le code original, précisément pour accélérer les choses.

Il faut mesurer si cela sera plus rapide dans MQL, "il semble" ne fonctionnera pas ici.

 
Koldun Zloy:

Ceci esttrès probablement fait dans l'original pour l'accélération.

Il faut mesurer si cela sera plus rapide dans MQL, "il semble" ne fonctionnera pas ici.

"Le plus probable" ne fonctionne pas non plus.
Comment un tel formulaire peut-il fonctionner plus rapidement ? De quoi parlez-vous ?

Deux boucles supplémentaires et un tableau supplémentaire au lieu d'une variable.

 

Nikolai Semko:

Deux boucles supplémentaires et un tableau supplémentaire au lieu d'une variable.

Un tel raisonnement primitif n'est pas adapté aux processeurs modernes.

 
Koldun Zloy:

Un tel raisonnement primitif n'est pas adapté aux processeurs modernes.

Tu le sais bien. Vous avez plus d'expérience...

 


Koldun Zloy
:

Un tel raisonnement primitif n'est pas adapté aux processeurs modernes.

En gros, je suis désolé, mais vous vous faites des illusions.

Aucun processeur existant aujourd'hui ne pourra jamais

for(i=0;i<=npoints-1;i++)

plus rapide par rapport à...

for(i=0;i<npoints;i++)

et l'accès à un tableau ne sera jamais plus rapide que l'accès à une simple variable,

trois boucles identiques ne seront jamais plus rapides qu'une seule boucle combinée.


Je n'ai pas été paresseux et j'ai testé la vitesse de deux variantes différentes directement dans l'ALGLIB original afin de ne pas être sans fondement :

      e=0;
      double tmp1;
      ulong t=GetMicrosecondCount();
      for(i=0;i<npoints;i++)
        {
         v=0.0;
         for(i_=0;i_<nvars;i_++)
           {
            tmp1=xy[i][i_]-ct[xyc[i]][i_];
            v+=tmp1*tmp1;
           }
         e=e+v;
        }
      t=GetMicrosecondCount()-t;
      Print("fast = "+(string)t+" микросекунд, e = "+DoubleToString(e) + " , npoints = " + (string)npoints+" , nvars = " + (string)nvars );



      e=0;
      t=GetMicrosecondCount();
      for(i=0;i<=npoints-1;i++)
        {
         for(i_=0;i_<=nvars-1;i_++)
            tmp[i_]=xy[i][i_];
         for(i_=0;i_<=nvars-1;i_++)
            tmp[i_]=tmp[i_]-ct[xyc[i]][i_];
         //--- calculation
         v=0.0;
         for(i_=0;i_<=nvars-1;i_++)
            v+=tmp[i_]*tmp[i_];
         e=e+v;
        }
      t=GetMicrosecondCount()-t;
      Print("slow = "+(string)t+" микросекунд, e = "+DoubleToString(e) + " , npoints = " + (string)npoints+" , nvars = " + (string)nvars );

résultat :

2018.06.27 04:36:50.265 TestClasses (GBPUSD,M6) fast = 571 микросекунд, e = 534.47773777 , npoints = 1500 , nvars = 40
2018.06.27 04:36:50.266 TestClasses (GBPUSD,M6) slow = 841 микросекунд, e = 534.47773777 , npoints = 1500 , nvars = 40
2018.06.27 04:36:50.630 TestClasses (GBPUSD,M6) fast = 577 микросекунд, e = 531.85904819 , npoints = 1500 , nvars = 40
2018.06.27 04:36:50.631 TestClasses (GBPUSD,M6) slow = 812 микросекунд, e = 531.85904819 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.143 TestClasses (GBPUSD,M6) fast = 599 микросекунд, e = 537.42685690 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.144 TestClasses (GBPUSD,M6) slow = 853 микросекунд, e = 537.42685690 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.955 TestClasses (GBPUSD,M6) fast = 600 микросекунд, e = 531.17444713 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.956 TestClasses (GBPUSD,M6) slow = 809 микросекунд, e = 531.17444713 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.344 TestClasses (GBPUSD,M6) fast = 567 микросекунд, e = 540.39509565 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.344 TestClasses (GBPUSD,M6) slow = 813 микросекунд, e = 540.39509565 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.857 TestClasses (GBPUSD,M6) fast = 690 микросекунд, e = 550.68494369 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.858 TestClasses (GBPUSD,M6) slow = 820 микросекунд, e = 550.68494369 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.229 TestClasses (GBPUSD,M6) fast = 585 микросекунд, e = 547.94313745 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.230 TestClasses (GBPUSD,M6) slow = 811 микросекунд, e = 547.94313745 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.736 TestClasses (GBPUSD,M6) fast = 560 микросекунд, e = 568.39404456 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.737 TestClasses (GBPUSD,M6) slow = 813 микросекунд, e = 568.39404456 , npoints = 1500 , nvars = 40

C'est-à-dire que vous pouvez voir que le gain de vitesse est supérieur à 40%.

Dossiers :
dataanalysis.mqh  1150 kb
TestClasses.mqh  2762 kb
 
Nikolai Semko:

Eh bien, en gros, je suis désolé, mais vous vous faites des illusions.

Aucun processeur existant aujourd'hui ne pourra jamais

plus rapide par rapport à...

et l'accès à un tableau ne sera jamais plus rapide que l'accès à une simple variable,

trois boucles identiques ne seront jamais plus rapides qu'une seule boucle combinée.


Je n'ai pas été paresseux et j'ai testé la vitesse de deux variantes différentes directement dans l'ALGLIB original afin de ne pas être sans fondement :

résultat :

C'est-à-dire que vous pouvez voir que le gain de vitesse est supérieur à 40%.

Merci pour le test ! Je pense que cela fonctionnera plus rapidement non seulement dans MQL, mais dans tous les langages.

Les raisons auxquelles je pensais étaient que le programmeur qui l'avait écrit n'était pas seulement payé pour que le programme fonctionne, mais pour le nombre de lignes. Car un programme de 500 lignes n'est pas aussi impressionnant pour un client qu'un programme de 5000 lignes. Il est dommage que la vitesse et la lisibilité du code en aient souffert.

 
elibrarius:
Je pense que cela fonctionnera plus rapidement non seulement dans MQL mais dans tous les langages.

Bien sûr.

 
J'ai remarqué que lorsque je me connecte à MQL, il y a une erreur et dans le statut du navigateur, il y a une longue réponse (probablement une autorisation) de Facebook.
 
SEM:

Outil synthétique. J'importe des barres de minutes, chaque barre de minutes diffère d'un point (5 chiffres).

Je ferme la fenêtre avec les symboles, puis rouvre cette fenêtre, demande les barres minutes du chargement précédent, j'obtiens

Les symboles sont les mêmes pour chaque journée complète. Quelle est l'erreur ?

Lecture stable ? Quelle construction ?

 
Alexander:

Lecture stable ? Quelle construction ?

Oui, le problème est reproductible. Version 1870.
Raison: