Algorithmes, méthodes de résolution, comparaison de leurs performances - page 20

 
Реter Konow:

Je ne vois pas pourquoi vous ajouteriez des entités à une solution idéale. Je ne vois pas l'intérêt.

On ne porte pas deux casquettes en même temps. Et pourquoi ça ?

Expliquez d'abord ceci. ))


"Vous torturez les gens et les faites souffrir, vous les rabaissez moralement et psychologiquement....."

Le Monde Maudit (Recueil)Auteurs : Dmitri Ganin

 
Sergey Dzyublik:

"Vous torturez les gens et les faites souffrir, vous les rabaissez moralement et psychologiquement....."

Le Monde Maudit (collection)Auteurs : Dmitry Ganin

Je m'excuse sincèrement auprès de tous ceux que j'ai fait souffrir moralement et psychologiquement par inadvertance.

Je n'ai pas poursuivi d'autre but que celui de trouver la solution parfaite à un problème particulier.

Au contraire, j'ai moi-même subi des attaques incompréhensibles et des agressions non motivées.

Apparemment, c'est le prix à payer par tous ceux qui ne veulent pas "suivre" la société.

Eh bien, j'ai fait mon choix et je ne blâme personne...

 
Реter Konow:

Je ne vois pas pourquoi vous ajouteriez des entités à une solution idéale.


Il est peut-être trop tôt pour parler de votre code comme d'une solution idéale.

Et voici la collection actuelle de chapeaux

 
Alexandr Andreev:

Il est peut-être trop tôt pour parler de votre code comme d'une solution parfaite.

Je parlais en termes généraux, pour ainsi dire...

"Pourquoi, à une solution idéale (n'importe quelle solution), ajouter des entités."

Je dois dire que de nombreuses personnes m'ont donné des idées très précieuses et m'ont signalé les bonnes erreurs :

1. une erreur de comptage de caractères.

2. erreur causée par des collisions de sous-chaînes à l'intérieur d'une chaîne commune.

3. Débordement de la mémoire allouée à chaque chaîne particulière. 4.

(4) Croyance erronée que la modification de la taille d'un tableau entraîne l'effacement des données.


Merci beaucoup à tous d'avoir signalé ces erreurs !

 
Реter Konow:
...

Merci beaucoup à tous d'avoir signalé ces erreurs !

Pour être objectif, la dernière, la solution idéale, appartient à tout le monde, car, j'y suis arrivé grâce à la mise en évidence des erreurs, à la communication et à l'interaction avec les gens.

 
Реter Konow:

Pour être objectif, la dernière, la solution idéale, appartient à tout le monde, parce que j'y suis arrivé en signalant des erreurs, en communiquant et en interagissant avec les gens.


Une fois de plus, la dernière option n'est qu'une option, ce qui précédait n'était pas du tout une option ! Et le fait qu'il soit parfait est un point discutable.

 
Alexandr Andreev:

Une fois de plus, la dernière option n'est qu'une option, ce qui précédait n'était pas du tout une option ! Et le fait que ce soit parfait est un point discutable.

(gloussements) Bien. Que ce soit parfait pour moi seulement. Chacun peut le juger à sa propre échelle.
 

Je propose que nous passions aux empreintes DEBAG et aux comètes - qui a une idée ?

 

testé le temps de fonctionnement si la fonction est :

1. enveloppé dans une classe

2. enveloppé dans une classe, une instance de la classe est créée en utilisant l'opérateur new.

3. appelez simplement la fonction sans utiliser de wrapper.

//+------------------------------------------------------------------+

#define    SpeedTest(count_x10,msg,EX)        {uint mss=GetTickCount(); ulong count=(ulong)pow(10,count_x10);for(ulong i=0;i<count&&!_StopFlag;i++){EX;} \
                                              printf("%s: loops=%i ms=%u",msg,count,GetTickCount()-mss);}
//+------------------------------------------------------------------+
class COpen
{
private:
   string            m_symbol;
public:
                     COpen(const string symbol): m_symbol(symbol) {}
   double            getOpen(const int bar) const                 { return(iOpen(m_symbol, 0, bar)); }

};
//+------------------------------------------------------------------+
void OnStart()
{  #define  loop_x10 9
//1.
   COpen sym1(_Symbol);
   srand(GetTickCount());
   SpeedTest(loop_x10, "1. COpen", sym1.getOpen(rand()));
//2.
   srand(GetTickCount());
   SpeedTest(loop_x10, "2. new COpen",
             COpen *sym2 = new COpen(_Symbol);
             sym2.getOpen(rand());
             delete sym2;
            );
//3.            
   srand(GetTickCount());
   SpeedTest(loop_x10, "3. iOpen",iOpen(NULL,0,rand()););            
}
//_______________________________________________________________________

2019.10.12:39:29.802 SpeedTst_class (EURUSD,M1) 1. COpen : loops=1000000000 ms=41016

2019.10.12:41:05.352 SpeedTst_class (EURUSD,M1) 2. Nouveau COpen : loops=1000000000 ms=95562

2019.10.12:41:45.939 SpeedTst_class (EURUSD,M1) 3. iOpen : loops=1000000000 ms=40578


Les tests 1 et 3 sont côte à côte en termes de performance, c'est-à-dire que l'intégration des appels de fonction dans la classe n'est pas critique, le test 2 a ajouté du temps à cause des appels de constructeur et de destructeur.

 

Test de vitesse d'exécution deSymbolInfoDouble()

#property version   "1.00"
// количество итераций теста
#define  LOOPx10 8

#define    SpeedTest(count_x10,msg,EX)        {uint mss=GetTickCount(); ulong count=(ulong)pow(10,count_x10);for(ulong i=0;i<count&&!_StopFlag;i++){EX;} \
                                              printf("%s: loops=%i ms=%u",msg,count,GetTickCount()-mss);}
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   double lot;

   srand(GetTickCount());
   SpeedTest(LOOPx10, "calcNormVol_my()", lot = rand() / 1000.0; calcNormVol_my(lot))

   srand(GetTickCount());
   SpeedTest(LOOPx10, "calcNormVol_alexeyvik()", lot = rand() / 1000.0; calcNormVol_alexeyvik(lot))
   
   srand(GetTickCount());
   SpeedTest(LOOPx10, "calcNormVol_fxsaber()", lot = rand() / 1000.0; calcNormVol_fxsaber(lot))
   
   srand(GetTickCount());
   SpeedTest(LOOPx10, "calcNormVol_my_2()", lot = rand() / 1000.0; calcNormVol_my_2(lot))

}
//+------------------------------------------------------------------+
double calcNormVol_my(const double value)
{
   const static string sym = _Symbol;
   return(NormalizeDouble(fmax(fmin(SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP) * round(value / SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP)), SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX)),
                               SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN)),  2));
}
//+------------------------------------------------------------------+
double calcNormVol_alexeyvik(const double value)
{
//   const string sym = _Symbol;
   return(
            NormalizeDouble(fmax(fmin(SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_STEP) * round(value / SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_STEP)),
                                      SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MAX)),  SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN)), 2)
         );
}
//+------------------------------------------------------------------+
const double VolumeStep = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
const double VolumeMax = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
const double VolumeMin = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
const int O_DigitsInVolumeStep = 2;
double calcNormVol_fxsaber( const double value )
{
   return((value > VolumeMax) ? VolumeMax
          : ((value < VolumeMin) ? VolumeMin
             : NormalizeDouble(VolumeStep * (int)(value / VolumeStep + 0.5), O_DigitsInVolumeStep)));
}
//+------------------------------------------------------------------+
double calcNormVol_my_2( const double value )
{
   const static double volumeStep = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
   const static double volumeMax = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
   const static double volumeMin = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
   const static int o_digitsInVolumeStep = 2;
   return((value > volumeMax) ? volumeMax
          : ((value < volumeMin) ? volumeMin
             : NormalizeDouble(volumeStep * (int)(value / volumeStep + 0.5), o_digitsInVolumeStep)));
}
//+------------------------------------------------------------------+

2019.12.11 21:13:08.896 tst_volum (EURUSD,W1) calcNormVol_my() : loops=100000000 ms=173406

2019.12.11 21:15:45.425 tst_volum (EURUSD,W1) calcNormVol_alexeyvik() : loops=100000000 ms=156531

2019.12.11 21:15:45.533 tst_volum (EURUSD,W1) calcNormVol_fxsaber() : loops=100000000 ms=110

2019.12.11 21:15:45.916 tst_volum (EURUSD,W1) calcNormVol_my_2() : loops=100000000 ms=390


Raison: