DoubleとFLOATの比較 - MathFloorの不明確なエラー - ページ 2 1234567 新しいコメント Vladislav Andruschenko 2017.02.26 08:00 #11 float AUTOPRICE; float askP=NormalizeDouble(Ask,Digits)/NormalizeDouble(Point,Digits); float bidP=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits); float Averab=((askP+bidP))/2.0; AUTOPRICE=MathFloor(Averab)*Point; Print("FLOAT "+" askP="+askP+" bidP="+bidP+" Averab="+DoubleToString(Averab,10)+" AUTOPRICE="+DoubleToString(AUTOPRICE,10)); double AUTOPRICE2; double askP2=NormalizeDouble(Ask,Digits)/NormalizeDouble(Point,Digits); double bidP2=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits); double Averab2=((askP2+bidP2))/2.0; AUTOPRICE2=MathFloor(Averab2)*Point; Print("DOUBLE "+" askP2="+askP2+" bidP2="+bidP2+" Averab2="+DoubleToString(Averab2,10)+" AUTOPRICE="+DoubleToString(AUTOPRICE2,10));スプレッド:22017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - DOUBLE TESTMATHFLOOR EURUSD,M30:DOUBLE askP2=105143 bidP2=105141 Averab2=105142.000000 AUTOPRICE=1.05142000002017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105143 bidP=105141 Averab=105142.00000000 AUTOPRICE=1.0514199734スプレッド:32017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105144 bidP2=105141 Averab2=105142.5000000000 AUTOPRICE=1.05142000002017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105144 bidP=105141 Averab=105142.5000000000 AUTOPRICE=1.0514199734スプレッド:42017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105145 bidP2=105141 Averab2=105143.000000 AUTOPRICE=1.05142000002017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105145 bidP=105141 Averab=105143.00000000 AUTOPRICE=1.0514299870スプレッド:52017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105146 bidP2=105141 Averab2=105143.5000000000 AUTOPRICE=1.05143000002017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105146 bidP=105141 Averab=105143.5000000000 AUTOPRICE=1.0514299870 Double vs FLOAT - iTime and iBarShift return PREDICT time period Vladislav Andruschenko 2017.02.26 08:02 #12 は、問題をより具体的に説明するために、トピック名を変更しました。 fxsaber 2017.02.26 08:52 #13 Vladislav Andruschenko:2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105145 bidP2=105141 Averab2=105143.000000 AUTOPRICE=1.0514200000結果は正解です。Averab2 < 105143。 Vladislav Andruschenko 2017.02.26 08:54 #14 fxsaber: 結果は正解です。Averab2 < 105143。なぜかというと、Averab2=105143.00000000 だからです。 fxsaber 2017.02.26 08:55 #15 Vladislav Andruschenko: Averab2=105143.00000000の 理由は? トレーディング、自動売買システム、ストラテジーテストに関するフォーラム DoubleとFLOATの比較 - MathFloorの不明確なエラー fxsaber さん 2017.02.26 08:27 二重番号のプリントアウトは、何の意味もありません。doubleの真の値を表示したい場合は、そのバイトを見る必要があります。 Andrey F. Zelinsky 2017.02.26 08:59 #16 Vladislav Andruschenko: なぜかというと、Averab2=105143.00000000 だからです。 というのも、https://www.mql5.com/ru/docs/math/mathfloor Vladislav Andruschenko 2017.02.26 09:00 #17 fxsaber: 言いたいことはわかります。ありがとうございます。しかし、これは下塗りをしていない状態での話です。 しかし、コード内の実値は、アンプライム後と同じです。 何度も確認しました。 了解しました。は、ダブル1=1.00000000000000001123515であることを意味します。といった具合に。:-( OK、肝心の問題はfloatで解決。 Vladislav Andruschenko 2017.02.26 09:02 #18 Andrey F. Zelinsky: というのも、https://www.mql5.com/ru/docs/math/mathfloor105143MathFloor(105143) =105142の 後105143.000000000000001でもが、何を言っているのかわかる気がする。までもPrint(2+" MathFloor="+MathFloor(2));2 MathFloor=2なぜMathFloor(105143) =105142 なのか、理解できない...。(105143ではなく、105142.9999999999 であれば別ですが)。 Andrey F. Zelinsky 2017.02.26 09:08 #19 Vladislav Andruschenko:然れば というのも、https://www.mql5.com/ru/docs/convert/normalizedouble fxsaber 2017.02.26 09:09 #20 Vladislav Andruschenko:なぜ、MathFloor(105143) =105142 なのか、理解できませんが......。(105143ではなく、105142.999999999999 でなければ)。#define TOSTRING(A) #A + " = " + (string)(A) + " "void OnStart(){ double Price1 = 105143; double Price2 = Price1 - 1 e-11; Print(TOSTRING(Price1) + TOSTRING(MathFloor(Price1)) + TOSTRING(Price2) + TOSTRING(MathFloor(Price2)) + TOSTRING(Price1 > Price2));} 結果Price1 = 105143.0 MathFloor(Price1) = 105143.0 Price2 = 105143.0 MathFloor(Price2) = 105142.0 Price1>Price2 = trueダブルナンバーを文字通りに受け取らない方がいい。フロートへの切り替えは、さらに落とし穴です。 1234567 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
float askP=NormalizeDouble(Ask,Digits)/NormalizeDouble(Point,Digits);
float bidP=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
float Averab=((askP+bidP))/2.0;
AUTOPRICE=MathFloor(Averab)*Point;
Print("FLOAT "+" askP="+askP+" bidP="+bidP+" Averab="+DoubleToString(Averab,10)+" AUTOPRICE="+DoubleToString(AUTOPRICE,10));
double AUTOPRICE2;
double askP2=NormalizeDouble(Ask,Digits)/NormalizeDouble(Point,Digits);
double bidP2=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
double Averab2=((askP2+bidP2))/2.0;
AUTOPRICE2=MathFloor(Averab2)*Point;
Print("DOUBLE "+" askP2="+askP2+" bidP2="+bidP2+" Averab2="+DoubleToString(Averab2,10)+" AUTOPRICE="+DoubleToString(AUTOPRICE2,10));
スプレッド:2
2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - DOUBLE TESTMATHFLOOR EURUSD,M30:DOUBLE askP2=105143 bidP2=105141 Averab2=105142.000000 AUTOPRICE=1.0514200000
2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105143 bidP=105141 Averab=105142.00000000 AUTOPRICE=1.0514199734
スプレッド:3
2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105144 bidP2=105141 Averab2=105142.5000000000 AUTOPRICE=1.0514200000
2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105144 bidP=105141 Averab=105142.5000000000 AUTOPRICE=1.0514199734
スプレッド:4
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105145 bidP2=105141 Averab2=105143.000000 AUTOPRICE=1.0514200000
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105145 bidP=105141 Averab=105143.00000000 AUTOPRICE=1.0514299870
スプレッド:5
2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105146 bidP2=105141 Averab2=105143.5000000000 AUTOPRICE=1.0514300000
2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105146 bidP=105141 Averab=105143.5000000000 AUTOPRICE=1.0514299870
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105145 bidP2=105141 Averab2=105143.000000 AUTOPRICE=1.0514200000
結果は正解です。Averab2 < 105143。
結果は正解です。Averab2 < 105143。
なぜかというと、Averab2=105143.00000000 だからです。
Averab2=105143.00000000の 理由は?
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
DoubleとFLOATの比較 - MathFloorの不明確なエラー
fxsaber さん 2017.02.26 08:27
二重番号のプリントアウトは、何の意味もありません。doubleの真の値を表示したい場合は、そのバイトを見る必要があります。
なぜかというと、Averab2=105143.00000000 だからです。
言いたいことはわかります。ありがとうございます。しかし、これは下塗りをしていない状態での話です。
しかし、コード内の実値は、アンプライム後と同じです。 何度も確認しました。
了解しました。
は、ダブル1=1.00000000000000001123515であることを意味します。
といった具合に。
:-( OK、肝心の問題はfloatで解決。
というのも、https://www.mql5.com/ru/docs/math/mathfloor
105143
MathFloor(105143) =105142の 後
105143.000000000000001でも
が、何を言っているのかわかる気がする。
までも
なぜMathFloor(105143) =105142 なのか、理解できない...。(105143ではなく、105142.9999999999 であれば別ですが)。
然れば
なぜ、MathFloor(105143) =105142 なのか、理解できませんが......。(105143ではなく、105142.999999999999 でなければ)。
void OnStart()
{
double Price1 = 105143;
double Price2 = Price1 - 1 e-11;
Print(TOSTRING(Price1) + TOSTRING(MathFloor(Price1)) +
TOSTRING(Price2) + TOSTRING(MathFloor(Price2)) +
TOSTRING(Price1 > Price2));
}
ダブルナンバーを文字通りに受け取らない方がいい。フロートへの切り替えは、さらに落とし穴です。