MQL4およびMQL5でDigits()をバイパスして任意の数値(引用符だけでなく)の小数点以下桁数を取得 - ページ 13 1...67891011121314151617181920...22 新しいコメント Ilya Malev 2018.12.06 18:46 #121 Dmitry Fedoseev:これは、f/=0.0000001;というのが疑問です。テスターの課金は不具合があるのは確かだが、それ以外は問題ない ) Ilya Malev 2018.12.06 19:03 #122 Ilya Malev 2018.12.06 20:27 #123 そして、これは同じ結果で2倍の速さです int dtd2(double f) { long l=long(f/0.0000001); int d = 0, i = 10000000; while( d < 7 && l % i > 0 ) { i /= 10; d ++ ; } return d ; } Dmitry Fedoseev 2018.12.06 21:01 #124 Ilya Malev:そして、これは同じ結果で2倍の速さです ここで必要なのはスピードではなく、initeで一回、もしくはGUIイベントで行う。ここで重要なのは、動作の正しさです。ダブったものを分割して、端数を 切り捨てるような仕事の正しさはどこから来るのだろう。なんとなく奇跡的に正しく動作しているのかもしれませんが、納得のいくテストが必要です。 Ilya Malev 2018.12.06 21:08 #125 Dmitry Fedoseev:ここで必要なスピードは、イニテで一回、もしくはGUIイベントで行います。ここで重要なのは、動作の正しさです。ダブりを分割して端数 部分を捨てているのに、どうして正しく動作するのでしょうか?なんとなく奇跡的に正しく動作しているのかもしれませんが、納得のいくテストが必要です。まあ、バグが見つかったら(1kkk+などの値以外)ヒントを頂けるとありがたいです。 Dmitry Fedoseev 2018.12.06 21:19 #126 Ilya Malev:まあ、バグが見つかったら(1kkk+みたいな値を除いて)ヒントをくれるとありがたいんですけどね。そして、使わないから探さない。なぜ、そのように確信が持てるのですか? Ilya Malev 2018.12.06 21:25 #127 Dmitry Fedoseev:そして、使わないから探さない。なぜ、すべて正しいと断言できるのか不思議です。0.7,0.07,50000000.9991などのランダムクォートと任意の数字でチェックし、さらに比較スピードテストもしました。ただ、この機能を使うのは、インサイトではなく、もっと頻繁に使うつもりです。でも、一般的には、タンバリンを持って踊らないのであれば、通常のDigitsで 十分なのですが...。 Dmitry Fedoseev 2018.12.06 22:35 #128 9999999999.9999 - dtd2()は7を返し、私のは4です。しかし、それは些細なことです。全体として、この機能は良い、やっと理解できた。 Ilya Malev 2018.12.07 13:19 #129 Dmitry Fedoseev:9999999999.9999 - dtd2()は7を返し、私のは4です。しかし、それは些細なことです。全体として、機能が良く、やっと理解できた。まあ、それはそれとして、自分でも上の方でこの数字をいくつかあげてみました。 Ilya Malev 2018.12.07 13:53 #130 #property strict #define test(M,EX) {uint mss=GetTickCount();int nn=(int)pow(10,M);for(int tst=0;tst<nn;tst++){EX;}printf("loops=%i ms=%u",nn,GetTickCount()-mss);} int d(double x){ int n; for(n=0;n<8;n++){ if(x==NormalizeDouble(x,n)){ return(n); } } return(n-1); } int dtd2(double f) { long l=long(f/0.0000001); int d = 0, i = 10000000; while( d < 7 && l % i > 0 ) { i /= 10; d ++ ; } return d ; } int dtd3(double f) { long l=long(f/0.0000001); if(l%10==0) if(l%100==0) if(l%1000==0) if(l%10000==0) if(l%100000==0) if(l%1000000==0) if(l%10000000==0) return 0; else return 1; else return 2; else return 3; else return 4; else return 5; else return 6; else return 7; } void OnStart() { srand(GetTickCount()); Print("d:"); test(7,int k=rand()%Bars;double f=Close[k]*rand()/(rand()+1.0);d(f)) Print("dtd2:"); test(7,int k=rand()%Bars;double f=Close[k]*rand()/(rand()+1.0);dtd2(f)) Print("dtd3:"); test(7,int k=rand()%Bars;double f=Close[k]*rand()/(rand()+1.0);dtd3(f)) } 1...67891011121314151617181920...22 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
これは、f/=0.0000001;というのが疑問です。
テスターの課金は不具合があるのは確かだが、それ以外は問題ない )
そして、これは同じ結果で2倍の速さです
そして、これは同じ結果で2倍の速さです
ここで必要なのはスピードではなく、initeで一回、もしくはGUIイベントで行う。ここで重要なのは、動作の正しさです。ダブったものを分割して、端数を 切り捨てるような仕事の正しさはどこから来るのだろう。なんとなく奇跡的に正しく動作しているのかもしれませんが、納得のいくテストが必要です。
ここで必要なスピードは、イニテで一回、もしくはGUIイベントで行います。ここで重要なのは、動作の正しさです。ダブりを分割して端数 部分を捨てているのに、どうして正しく動作するのでしょうか?なんとなく奇跡的に正しく動作しているのかもしれませんが、納得のいくテストが必要です。
まあ、バグが見つかったら(1kkk+などの値以外)ヒントを頂けるとありがたいです。
まあ、バグが見つかったら(1kkk+みたいな値を除いて)ヒントをくれるとありがたいんですけどね。
そして、使わないから探さない。なぜ、そのように確信が持てるのですか?
そして、使わないから探さない。なぜ、すべて正しいと断言できるのか不思議です。
0.7,0.07,50000000.9991などのランダムクォートと任意の数字でチェックし、さらに比較スピードテストもしました。ただ、この機能を使うのは、インサイトではなく、もっと頻繁に使うつもりです。でも、一般的には、タンバリンを持って踊らないのであれば、通常のDigitsで 十分なのですが...。
9999999999.9999 - dtd2()は7を返し、私のは4です。しかし、それは些細なことです。全体として、この機能は良い、やっと理解できた。
9999999999.9999 - dtd2()は7を返し、私のは4です。しかし、それは些細なことです。全体として、機能が良く、やっと理解できた。
まあ、それはそれとして、自分でも上の方でこの数字をいくつかあげてみました。