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++では、コードはコンパイラによって上から下へと厳密に処理されるため、上にあるものはすでに初期化されています。 そして、下のものにはアクセスできません。だから、すべてがクリアなのです。
自由度が低い。