DoubleとFLOATの比較 - MathFloorの不明確なエラー - ページ 3

 
Andrey F. Zelinsky:
というのも、https://www.mql5.com/ru/docs/convert/normalizedouble

Print()を使ってログブックに出力する場合、正規化された数値には予想以上に多くの小数点以下の桁数が含まれることがあることに注意してください。例えば、こんな感じです。

その後、コメントで同じ

 
fxsaber:
#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
ダブルナンバー未設定を文字通りに受け取らないでください。

ありがとうございます。結局、正しい解答を見つけたに違いないのですが、アライメントが正しくないので、ミスがないか心配でした

 

正規化されていない数値を別の正規化されていない数値で割った余り であり、結果はいかなる場合も正規化されていない。

この機能は、未熟な精神にトラウマを与えないように、言語から完全に取り除くべきである。

 
Vladislav Andruschenko:

結局、正しい解答を見つけたのかもしれない。

残念ながら、あなたのコードは、完全に誤解していることを示すものです。問題の真相に迫るようにする。
 
Dmitry Fedoseev:

正規化されていない数値を別の正規化されていない数値で割った余り であり、結果はいかなる場合も正規化されていない。

この機能は、未熟な精神にトラウマを与えないように、言語から完全に取り除くべきである。

まあ、私の場合はすべてが正常化されているのですが。そこが面白いんです。
 
Vladislav Andruschenko:
まあ、私はいいんですけどね。そこが厄介なところです。
無駄なコンバージョンをして、看板をなくす原因になっている。

計算結果を直接使用する前にのみ正規化する。数値の変換や換算は、事前にできるだけ避けてください。
 
Andrey Dik:
無駄な変換を行っているため、文字化けが発生している。
これらはもう絶望的なコードです......。いろいろな方法でやっています。しかし、上記で言われているようにおそらく、間違って受け取ったために、私はその間違いに罪を犯してしまったのでしょう。これらの変数もコード上では不具合がありましたが。

皆さん、ご協力ありがとうございました。しかし、フロートではすべてがクリアに機能します。
 
Vladislav Andruschenko:
フロートですべて正常に動作します。
最悪の勧告として、doubleからfloatへの切り替えがあります。
 
Vladislav Andruschenko:
まあ、私はいいんですけどね。そこが面白いところです。
いったいどこが正常なんだ?
 
Vladislav Andruschenko:
もう絶望的なコードです......。いろいろな方法でやっています。しかし、上記で言われているようにおそらく、私がバグで罪を犯していると間違って受け止めたからでしょう。これらの変数もコード上では不具合がありましたが。

皆さん、ご協力ありがとうございました。しかし、フロートではすべてがクリアに機能します。
フロートは何のメリットもない数字の去勢です。変換のロスをすべて処理し、できるだけ高い精度である倍速を使うほうがいいのです。