標準的な機能/アプローチの代替実装 - ページ 6

 
fxsaber:

アナログでも性能は千差万別です。書ける人、探せる人は、ユーザーの何割にも満たない。

実際、これらのスピードアップのほとんどは、孤立したテスト測定においてのみ評価できるものです。

もちろん、完璧を目指せというのは論外ですが、優先順位をつけてやっていくのがいいと思います。

 
Alexey Navoykov:

なぜなら、他の人々は利用可能な性能に非常に満足しているからです)結局のところ、これらのスピードアップのほとんどは、孤立したテスト測定においてのみ顕著なのです。

Optimizationが1%でも向上すれば、目に見える効果が得られます。

確かに完璧を目指すことに異論はありませんが、優先順位をつけて行うことが望ましいと思います。

MQにとってあなたは、様々な理由で5に乗り換えないMT4の賢い人たちよりも、面白みがない存在です。

 
Библиотеки: Fast iBarShift and Bars for MT5
Библиотеки: Fast iBarShift and Bars for MT5
  • 2018.05.04
  • www.mql5.com
Fast iBarShift and Bars for MT5: Автор: Nikolai Semko...
ファイル:
iBars.mqh  14 kb
 

標準関数 ceil(), floor(), round() のより高速な類似関数

2-2.5倍速のアドバンテージ

long Ceil (double x) { return (x-(long)x>0)?(long)x+1:(long)x; }
long Round(double x) { return (x>0)?(long)(x+0.5):(long)(x-0.5);}
long Floor(double x) { return (x>0)?(long)x:((long)x-x>0)?(long)x-1:(long)x; }

正答率、スピードテストの結果。

2018.08.25 17:23:23.199 TestRound (EURUSD,M10)  Время выполнения ceil =  3.745 наносекунд, Контрольная сумма = 5250492895
2018.08.25 17:23:23.200 TestRound (EURUSD,M10)  Время выполнения Ceil =  1.806 наносекунд, Контрольная сумма = 5250492895
2018.08.25 17:23:23.205 TestRound (EURUSD,M10)  Время выполнения floor = 4.243 наносекунд, Контрольная сумма = 5249492896
2018.08.25 17:23:23.206 TestRound (EURUSD,M10)  Время выполнения Floor = 1.621 наносекунд, Контрольная сумма = 5249492896
2018.08.25 17:23:23.209 TestRound (EURUSD,M10)  Время выполнения round = 2.984 наносекунд, Контрольная сумма = 5249992896
2018.08.25 17:23:23.211 TestRound (EURUSD,M10)  Время выполнения Round = 1.519 наносекунд, Контрольная сумма = 5249992896
標準関数はdouble 型を 返す。しかし、丸めた関数がなぜdouble型を必要とするのか理解できないので、繰り返しませんでした。
ファイル:
TestRound.mq5  5 kb
 
Nikolai Semko:

正誤判定と速度判定の結果。

ただ、ナノではなく、マイルです。

 
fxsaber:

ただ、ナノではなく、マイルです。

nanoはありません。1000000が通過して、1000で割る。
ただ、ループパスの内容もすべて一緒にカウントされるため、さらに高速になります。3時間後にパソコンに向かい、これらの機能だけの実行時間計算を修正します。
 
Nikolai Semko:
nanoはありません。1000000が通過して、1000で割る。
それでは曖昧な解釈ですね。関数呼び出し ごとの平均時間ではなく、サイクルタイムを出力することにした。
 
fxsaber:
曖昧な解釈のままでは1つの関数呼び出しの 平均時間ではなく、サイクルタイムを出力することにした。
そう、この時間には、まだ3回の追加と1回のチェックを行う時間が含まれているのです。
私は方法を知っているので、それを修正します。だから、利得はさらに大きくなる。
 
Nikolai Semko:
標準関数はdouble 型を 返す。しかし、丸めた関数がなぜdouble型を必要とするのか理解できないので、繰り返しませんでした。

doubleをintegerに変換するのは(この方法では)糞みたいなコードになるからです。Round with friendsは、浮動小数点型から整数型を取得するようには設計されていません。