voidOnStart()
{
//--- выведем DBL_MAX с помощью Print(), это равносильно PrintFormat(%%.16G,DBL_MAX)Print("---- как выглядит DBL_MAX -----");
Print("Print(DBL_MAX)=",DBL_MAX);
//--- теперь выведем число DBL_MAX с помощью PrintFormat()PrintFormat("PrintFormat(%%.16G,DBL_MAX)=%.16G",DBL_MAX);
//--- Вывод в журнал "Эксперты"// Print(DBL_MAX)=1.797693134862316e+308// PrintFormat(%.16G,DBL_MAX)=1.797693134862316E+308//--- посмотрим как выводится тип floatfloat c=(float)M_PI; // нужно явно приводить к целевому типуPrint("c=",c, " Pi=",M_PI, " (float)M_PI=",(float)M_PI);
// c=3.14159 Pi=3.141592653589793 (float)M_PI=3.14159//--- покажем, что может произойти при арифметических операциях над вещественными типамиdouble a=7,b=200;
Print("---- перед арифметическими операциями");
Print("a=",a," b=",b);
Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- разделим a на b (7/200)
a=a/b;
//--- теперь как будто восстановим значение в переменной b
b=7.0/a; // ожидается, что b=7.0/(7.0/200.0)=>7.0/7.0*200.0=200 - но это не так//--- выведем вновь вычисленное значение bPrint("----- после арифметических операций");
Print("Print(b)=",b);
Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- вывод в журнал "Эксперты"// Print(b)=200.0// Print(DoubleToString(b,16))=199.9999999999999716 (видим, что на самом деле b уже не равно 200.0) //--- создадим очень маленькое значение epsilon=1E-013double epsilon=1 e-13;
Print("---- создадим очень маленькое число");
Print("epsilon=",epsilon); // получим epsilon=1E-013//--- теперь вычтем эпсилон из числа b и выведем снова значение в журнал "Эксперты"
b=b-epsilon;
//--- выводим двумя способамиPrint("---- после вычитания epsilon из переменной b");
Print("Print(b)=",b);
Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- вывод в журнал "Эксперты"// Print(b)=199.9999999999999 (теперь значение b после вычитания эпсилон не может округлиться до 200)// Print(DoubleToString(b,16))=199.9999999999998578// (теперь значение b после вычитания эпсилон не может округлиться до 200)
}
カーワード = NULL
Print("next====",curwords.m_next!=NULL); でエラーにならないのはなぜですか?
というのも
curwords.m_next!=NULL
オブジェクトを作成 する際に、参照をゼロにするのですか?
作成時はNULLではありません。
開発者は、CheckPointer関数を与えています。
インデックス 0 の要素は削除され,インデックス (n-1) の要素,つまり n は配列のサイズである最も新しい要素が削除されるはずである.
組み直す
int OnInit()
{
firstwords.m_next=NULL; firstwords.m_prev=NULL;
おなじ結果になる
やってみる
やってみる
なぜ試す必要があるのか :)
私は問題なく使えています :))
アイコンは必要に応じて設定し、表示することができます。
端末はUserフォルダに書き込んでいます。 ショートカットに/portableキーを指定しています。
組み直す
int OnInit()
{
firstwords.m_next=NULL; firstwords.m_prev=NULL;
おなじ結果になる
を試してみてください。
servicedeskにお書き ください。OS、ビットレート、端末のビルドを指定します。問題が継続的に再現されるソースコードを添付してください - 対処しましょう。
OKです。それなら度胸がつく。そこで、Print() 関数の説明には、「 double型の データは、小数点以下16 桁の精度で出力する」と書かれています。実は、Print()関数は、やや丸みを帯びたデータを出力 することが判明しています。
MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))=199.999999999999716
このトピックを提起していただきありがとうございます。
例
2つの通貨のPointを知るには?
を、現在の楽器のために使用します。
Symbol1, Symbol2の通貨は?
項目サイズは SymbolInfoDouble(symbol_name, property)で取得できる。
enum_symbol_info_double
識別子
商品説明
物件タイプ
SYMBOL_BID
入札 - 売却のための最良の提案
二重
SYMBOL_ASK
アスク - ベストビッド
二重
シンボルラスト
最後の取引が行われた価格
二重
SYMBOL_POINT
1ピップの価値
二重