エラー、バグ、質問 - ページ 705 1...698699700701702703704705706707708709710711712...3185 新しいコメント Victor 2012.04.07 08:49 #7041 Yedelkin: そして、Print()の 不具合に関する疑問は、このままにしておきましょうか。:) 好きなように。 Yedelkin 2012.04.07 09:06 #7042 victorg: 何でもいいんです。 OKです。それなら度胸がつく。そこで、Print() 関数の説明には、「 double型の データは、小数点以下16 桁の精度で出力する」と書かれています。実は、Print()関数は、やや丸みを帯びたデータを出力 することが判明しています。void OnStart() { double a,b; a=7.0/200.0; b=7.0/a; Print("Print(b)=",b); Print("Print(DoubleToString(b,16))=",DoubleToString(b,16)); }ND 0 victorg2 (EURUSD,M1) 11:04:42 Print(b)=200.0 MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))=199.9999999999716 Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float) www.mql5.com Основы языка / Типы данных / Вещественные типы (double, float) - Документация по MQL5 Vladimir Gomonov 2012.04.07 13:19 #7043 Yedelkin:OKです。それなら度胸がつく。そこで、Print() 関数の説明には、「 double型の データは、小数点以下16 桁の精度で出力する」と書かれています。実は、Print() 関数を使うと、少し丸みを帯びたデータになって しまうことが判明したのです。ND 0 victorg2 (EURUSD,M1) 11:04:42 Print(b)=200.0MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))=199.999999999999716123.4567890123456(7>5なので四捨五入) 説明通りのようです。ゼロが印刷されないのですが、故障でしょうか? Yedelkin 2012.04.07 14:05 #7044 MetaDriver: すべてが説明と合っているようです。ゼロが印刷されないのですが、何か問題でも? Print()関数で「ドットの後の小数点 以下 16 桁まで正確なdouble 型のデータ」と表示されないというバグです。 --- 2012.04.07 15:26 #7045 Yedelkin: Print()関数で「ドット以降小数点 以下 16 桁の精度を持つ double型の データ」が出力されないというバグが発生しました。引き留める Print("Print(b)="+ b); Yedelkin 2012.04.07 15:51 #7046 sergeev:引き留める確認する手間が省けました。//+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2012, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ void OnStart() { double a,b; a=7.0/200.0; b=7.0/a; //Print("Print(b)=",b); Print("Print(b)="+b); Print("Print(DoubleToString(b,16))=",DoubleToString(b,16)); } //+------------------------------------------------------------------+まず、コンパイラが「暗黙のうちに『数値』から『文字列』に変換する victorg2.mq5 12 22」を生成します。2番目。 IS 0 victorg2 (EURUSD,M1) 17:46:45 Print(b)=200 PJ 0 victorg2 (EURUSD,M1) 17:46:45 Print(DoubleToString(b,16))=199.9999999999716 Renat Fatkhullin 2012.04.07 17:35 #7047 完全なフォーマット制御を行うには、適切なPrintFormat関数を 使用します。void OnStart() { double a,b; a=7.0/200.0; b=7.0/a; printf("Format: %.15lf",b); PrintFormat("Format: %.15lf",b); } Format: 199.999999999999970 Format: 199.999999999999970 印刷のデフォルトは、2桁から4桁の通常の丸めモードです。ドキュメントを修正いたします。 Документация по MQL5: Общие функции / PrintFormat www.mql5.com Общие функции / PrintFormat - Документация по MQL5 Vladimir Gomonov 2012.04.07 18:56 #7048 構造体へのポインタ(ハンドル)を与えてください(できれば静的なものを含む配列へのポインタも)。 クラスでのラッピングは、しばしば悪い解決策になります。struct SEmpty { }; class CEmpty { }; void OnStart() { Print("sizeof(SEmpty) = ",sizeof(SEmpty)); Print("sizeof(CEmpty) = ",sizeof(CEmpty)); } 2012.04.07 20:49:38 SizeOf_Test (USDJPY,M30) sizeof(CEmpty) = 16 2012.04.07 20:49:38 SizeOf_Test (USDJPY,M30)サイズオブ(SEmpty) = 0 Renat Fatkhullin 2012.04.07 19:01 #7049 MetaDriver:構造体へのポインタ(ハンドル)を与えてください(できれば配列にも、静的なものも含めて)。 どのような意味で、なぜ? Vladimir Gomonov 2012.04.07 19:23 #7050 Renat:1.どのような意味で、そして 2.なぜ?1. CEmpty *C[]; // Это работает. SEmpty *S[]; // Error: 'SEmpty' - class type expected SizeOf_Test.mq5 19 1 構造体へのポインタの配列(アレイ)を作成する。その後の初期化で for(i){ S[i] = GetPointer(StaticStruct[i]); }.2.意味のあるデータを強固に(詰めて)配列しておくこと。 OpenCLの生バッファへのデータ出力(またはDLLへの送信、ファイルへの書き込みなど)を扱う場合に重要。同時に、データを書き換えることなく、データアクセスの順序を入れ替えることも可能です(ポインタのソート時など)。 1...698699700701702703704705706707708709710711712...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
そして、Print()の 不具合に関する疑問は、このままにしておきましょうか。:)
何でもいいんです。
OKです。それなら度胸がつく。そこで、Print() 関数の説明には、「 double型の データは、小数点以下16 桁の精度で出力する」と書かれています。実は、Print()関数は、やや丸みを帯びたデータを出力 することが判明しています。
void OnStart() { double a,b; a=7.0/200.0; b=7.0/a; Print("Print(b)=",b); Print("Print(DoubleToString(b,16))=",DoubleToString(b,16)); }MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))=199.9999999999716
OKです。それなら度胸がつく。そこで、Print() 関数の説明には、「 double型の データは、小数点以下16 桁の精度で出力する」と書かれています。実は、Print() 関数を使うと、少し丸みを帯びたデータになって しまうことが判明したのです。
MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))=199.999999999999716
123.4567890123456(7>5なので四捨五入)
すべてが説明と合っているようです。ゼロが印刷されないのですが、何か問題でも?
Print()関数で「ドット以降小数点 以下 16 桁の精度を持つ double型の データ」が出力されないというバグが発生しました。
引き留める
Print("Print(b)="+ b);引き留める
確認する手間が省けました。
まず、コンパイラが「暗黙のうちに『数値』から『文字列』に変換する victorg2.mq5 12 22」を生成します。
2番目。
IS 0 victorg2 (EURUSD,M1) 17:46:45 Print(b)=200
PJ 0 victorg2 (EURUSD,M1) 17:46:45 Print(DoubleToString(b,16))=199.9999999999716
完全なフォーマット制御を行うには、適切なPrintFormat関数を 使用します。
印刷のデフォルトは、2桁から4桁の通常の丸めモードです。ドキュメントを修正いたします。構造体へのポインタ(ハンドル)を与えてください(できれば静的なものを含む配列へのポインタも)。
クラスでのラッピングは、しばしば悪い解決策になります。
2012.04.07 20:49:38 SizeOf_Test (USDJPY,M30)サイズオブ(SEmpty) = 0
構造体へのポインタ(ハンドル)を与えてください(できれば配列にも、静的なものも含めて)。
どのような意味で、なぜ?
1.どのような意味で、そして
2.なぜ?
1.
CEmpty *C[]; // Это работает. SEmpty *S[]; // Error: 'SEmpty' - class type expected SizeOf_Test.mq5 19 1構造体へのポインタの配列(アレイ)を作成する。その後の初期化で for(i){ S[i] = GetPointer(StaticStruct[i]); }.
2.意味のあるデータを強固に(詰めて)配列しておくこと。
OpenCLの生バッファへのデータ出力(またはDLLへの送信、ファイルへの書き込みなど)を扱う場合に重要。
同時に、データを書き換えることなく、データアクセスの順序を入れ替えることも可能です(ポインタのソート時など)。