算法、解决方法、其性能的比较 - 页 20

 
Реter Konow:

我不知道你为什么要在一个理想的解决方案中加入实体。我看不出有什么意义。

你不可能同时戴两顶帽子。这又是为什么呢?

首先,解释一下这个问题。))


"你在折磨人,让他们受苦,在道德和心理上降低他们....。"

被诅咒的世界》(合集)作者:德米特里-加宁

 
Sergey Dzyublik:

"你确实在折磨人,让他们受苦,你在道德和心理上降低了他们....。"

被诅咒的世界》(合集)作者:德米特里-加宁

我真诚地向每一个我无意中使其在道德和心理上受到伤害的人道歉。

除了为某一特定问题找到完美的解决方案外,没有其他目的,我没有追求。

相反,我自己却遭受了无法理解的攻击和无动机的攻击。

显然,这是任何不想 "跟上 "社会步伐的人所付出的代价。

好吧,我已经做出了自己的选择,我不会责怪任何人......。

 
Реter Konow:

我不知道你为什么要在一个理想的解决方案中加入实体。


也许现在谈论你的代码作为一个理想的解决方案还为时过早。

这里是实际收集的帽子

 
Alexandr Andreev:

也许现在谈论你的代码是一个完美的解决方案还为时过早

我只是笼统地说了一下,可以这么说...

"为什么,对一个理想的解决方案(任何解决方案),要增加实体。"

我必须说,许多人给了我非常宝贵的想法,并指出了正确的错误。

1.一个字符计数错误。

2.由一个共同的字符串内的子字符串的碰撞引起的错误。

3.为每个特定字符串分配的内存溢出。

(4) 错误地认为改变阵列大小 会导致数据被删除。


非常感谢大家指出这些错误!

 
Реter Konow:
...

非常感谢大家指出这些错误!

客观地说,最后一个,即理想的解决方案,属于每个人,因为,我是通过指出错误,与人沟通和交流而得到的。

 
Реter Konow:

客观地说,最后一个,即理想的解决方案,属于每个人,因为,我是通过指出错误,与人沟通和交流而得出的。


再一次,最后一个选项只是一个选项,之前的东西根本就不是一个选项。而事实上,它是完美的,这是一个有争议的问题。

 
Alexandr Andreev:

再一次,最后一个选项只是一个选项,之前的东西根本就不是一个选项。而事实上,它是完美的,这一点是没有意义的。

好的,很好。只让它对我来说是完美的。每个人都可以根据自己的尺度来判断。
 

我建议我们继续讨论DEBAG印刷品和彗星--谁有什么想法?

 

测试的运行时间,如果该函数是。

1.被包裹在一个类中

2.包裹在一个类中,使用new操作符 创建一个类的实例。

3. 不使用包装器直接调用函数

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

#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. New COpen: loops=1000000000 ms=95562

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


测试1和3在性能方面是并列的,即函数调用包裹到类中并不关键,测试2由于构造器和析构器的调用而增加了时间。

 

SymbolInfoDouble() 执行速度测试

#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