MT5への願い - ページ 46

 
-Alexey-:
私はそうは思いません。問題があります。以下に例を示します(10000x10000のグリッド)。

double x1=0.0011;

double y1=x1/10000;

double x2=0.0012;
double y2=x2/10000;

double c=y1-y2;
double d=MathPow(c,2);


printf(文字列(d));

результат: 9.999999999999968e-017

では、この結果を受けて、どうすればいいのか。他の結果との比較は?DBL_EPSILON=2.2204460492503131e-016.最後の2ケタ以外に、ほらね。それも、たった2回の操作で。そして、このようなオペレーションを増やしています。そして、この情報は、後に何らかの操作でデータを復元するために使用されなければならない。損失が増える。私はC言語のような言語でプログラミングを学んでいるところなので、このようなクラスは私には作るのが難しい(というか方法がわからない)です。これは本格的な作品です。ところで、ひょっとして、そんな授業があるのでしょうか?そして開発者は、みんなのために一気に改善することができます。10万×10万のグリッドを作ることも可能でしょう。すでに多かれ少なかれ代表的なサンプルを入手することができるだろうが、これでも十分とは言えないほど多い。あと、任意精度のクラスも作ってくれたらもっといいんですけどね :)ただのデータ型です。存在するのであれば、そこには理由があり、ニーズを満たすものだからです。要は、開発者にとって難しいかどうかがわからないということです。難しくて高いなら......私もそう思います。なぜ、私の問題を相手に転嫁するのでしょう。でも、難しくないのなら--なぜやらないのか。ここでもまた、高精度の取引計算を行うための強力な開発環境ということで、競争力がありますね :) 。だから、それについてどう思うかを聞いているんです。

数の標準形を読み直していただければ、多くの疑問が解消されるはずです。

標準形では1.111e5は9.999e4より大きいので、この比較は非常に正しいです。

9.99999999999999968e-017は、2進数表現と関係があります。2進数のすべての数が有限小数で表現されるわけではなく、無限小数で表現されるものもあるので、仮数を有限小数で最も近い数に丸めることになるのです。

ちなみにdouble d=MathPow(c,2)ですが、doubleを扱う場合はdouble d=MathPow(c,2.0);となり、度を取るのは正しくありません。バグかどうかはわかりませんが、数値を度にする場合は指標の種類も気にした方がよいでしょう。

 
-Alexey-:
ファンタジーはまったく関係ない。私の疑問は、最も一般的な分析 方法を実施することが可能かどうかということでした。そしてそれは、トレンドとサイクルを取り除いた後に残った系列で作業することです。大学の金融統計の教科書や手法の本には、例外なくこの方法について書かれている。これは空想ではなく、分析の正統な アプローチの一つです。そして、専門的な環境には、この方法を実現する手段があるはずだと思いませんか?
)))))))
 
Urain:

数の標準形を読み直していただければ、多くの疑問が解消されるはずです。

標準形では1.111e5は9.999e4より大きいので、この比較は非常に正しい。

9.9999999999999999968e-017は、2進数表現と関係があり、2進数のすべての数が有限小数で表現されるわけではなく、無限小数で表現されるものもあるため、仮数を有限小数で最も近い数に丸めることになるのです。

1.111e5と9.999e4については、なるほどと思いました。でも、これを比較しないといけないんです。9.9999999999999999999999968e-017(桁の精度が落ちることについて追記しました)。ヘルプによると、DBL_EPSILONより 小さい差の数値は区別がつかないと 考えるべきとのことです。すみません、もし分かりにくかったら - 今勉強中なんです :)別途、インジケーターの情報をありがとうございました。

 
Urain:

ちなみにdouble d=MathPow(c,2)ですが、doubleを扱う場合はdouble d=MathPow(c,2.0)となり、度を取るのは正しくないので、バグかどうかはわかりませんが、数値を度に設定する場合は、指標の型に従う必要があるようです。

指数はいかなる場合にもdouble 型 でなければならない。
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Основы языка / Типы данных / Вещественные типы (double, float) - Документация по MQL5
 

開発者の皆さん、void型で 値を返せるようにするか、どんな型でも値を返す新しいクラスを定義してください。

こんな感じ。

voids get(int i)
  {
   if(i==0)return((int)2);
   else
     {
      if(i==1)return((double)2);
      else
        {
         if(i==2)return((string)2);
        }
     }
  }

ユーザー定義関数にこのような宣言を持たせたい。

int  Custom_ArraySize( void  array[] );   
bool Custom_ArraySort( number&  array[] );

そのためには、言語に何かを追加する必要があります。ユーザーを過剰に保護しすぎて、どこかで少し緩める必要があるのでは?

例えば、ある開発者がコードを書いていて、1500行を作成し、コード全体がdoubleで動作し、intを渡すにはさらに1500行のオーバーロードをしなければならないとします。そして、14種類もあるんですね。

 
Urain:

想像してみてください、ある人がコードを書いて1500行を作り、コード全体がdoubleで動くとしたら、それに渡すにはさらに1500行分のオーバーロードが必要です。そして、14種類もあるんですね。

OOPを使う。

 
lea:

OOPを使う。

私がオートコードで書いているとでも思っているのでしょうか?

を開発者の皆様にご紹介します。

を、執筆者の苦境を和らげるためのオプションとして、配列型変換を 行うことで、少なくともそのような呼びかけを行うことができます。

void OnStart()
  {
   int array[10];
   func((double)array)
  }
//+------------------------------------------------------------------+
void func(double &array[]){};
 
Urain:

私がオートコードで書いているとでも思っているのでしょうか?

そのような言語の拡張が必要だったということから判断すると、そうなのでしょうね。

p.s. 問題を解決した時点でC++コンパイラしかなかったら、言語規格の改訂を提案する声は聞こえてこないのでしょうか?

 
lea:

そのような言語の拡張が必要だったという事実に基づけば、どうやら、そうなのでしょう。

p.s. もし、あなたの問題の時にC++コンパイラしかなかったら - 言語規格の改訂を提案することはなかったのでしょうか?

mqlはコンパイラではなく、安全なC++の関数呼び出しを 記述するための翻訳機です。

そして、mql5は活発な開発段階に入っています。ですから、私の変更要望はかなり適当です。

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Основы языка / Функции / Вызов функции - Документация по MQL5
 
Urain:

mqlはコンパイラではなく、安全なC++の関数呼び出しを 記述するトランスレータです。

その上、mql5は開発の活発な段階にある。ですから、私の変更依頼はかなり適当です。

よし、そんなに重要なら、C++じゃなくてJavaにしよう。また、バイトコードへの翻訳 :)言語規格の再考をお願いします。

ユニバーサルタイプの追加要求では、ちょっと物足りない。 テンプレートを要求すべき。また、ユニバーサルタイプはOOPで十分です。