2019.01.0504:43:12.372 TestLog (EURUSD,H1) Result log2: sum=1400005128 time=297 ms
2019.01.0504:43:12.635 TestLog (EURUSD,H1) Result log2_: sum=1400018381 time=262 ms
2019.01.0504:43:12.809 TestLog (EURUSD,H1) Result _FastLog2: sum=1400004095 time=174 ms
顺便说一下,关于零,FastLog2不检查零,这给了它一个先机。但如果测试正确,它仍然比log2慢1.5-2倍)。
那么它有什么不正确的地方呢?
因为即使是你的测试版本也会产生。
顺便说一下,关于零,FastLog2不检查零,这给了它一个先机。但如果测试正确的话,它仍然比log2慢1.5-2倍)。
当然,我们应该从log2中删除零点检查,或者在FastLog2中添加同样的检查。
这个问题实际上是关于计算部分的速度。在log2中,一切都纯粹是通过移位和加法来计算。FastLog2在涉及乘法的巧妙转换后使用表值。这段代码非常古老,它是在数学协处理器时代使用的,从那时起情况很可能已经发生了变化。
这是标准的MQL5行为:静态变量排在全局变量之后。
你可以因为这个而变得非常严重的混乱。这是MQL5的标准行为:静态变量在全局变量之后开始。
这就是为什么类/结构的每一个静态变量都必须在结构本身之后声明?即使不给它赋予任何价值...也许我们应该建议编译器自动完成这一切?
这实质上是一个错误,是程序代码执行的不正确顺序。编译器原则上不应该允许这样做。 你应该多向开发者吼叫这个问题。
在C++中,代码被编译器严格地从上到下处理,所以上面的一切都已经被初始化了。 而且你不能访问下面的代码。这就是为什么一切都很清楚。 既然开发者在这里引入了他们自己的规则,就让他们提供正确的代码执行顺序。
在C++中,代码被编译器严格地从上到下处理,所以上面的任何东西都已经被初始化了。 而你无法访问下面的。这就是为什么一切都很清楚。
灵活性较低。