NormalizeDoubleによるMT4での数値の丸め方 - ページ 15

 
pavlick_:
10進法では1/3のように、無限小数でしか表せない数字もあります。しかし、1/3は3次系では無限小数ではなく、そこでは==0.1である。つまり、異なる数体系には、それぞれの無限分率が存在するのです。したがって、10進数で無限でない分数は、2進数では1である可能性があります。例:0.1, 0.2, 0.3, 0.4, ・・・。は、正確な2値表現がありません。NormalizeDoubleを 10回呼ぶと、0.1999999999・・・1か0.200000・・・1になります。 よくわからないけど、これはニュースかも。

本当なんですね!?はっきり言って、NDは比較のためだけに必要なのであって、表現するために必要なのではありません。しかも、とっくに陳腐化している。

 
pavlick_:
10進法では1/3など、無限の分数でしか表せない数字もある。しかし、1/3は3次系では無限小数ではなく、そこでは==0.1である。つまり、異なる数体系には、それぞれの無限分率が存在するのです。したがって、10進数で無限でない分数は、2進数では1である可能性があります。例:0.1, 0.2, 0.3, 0.4, ・・・。は、正確な2値表現がありません。NormalizeDoubleを 10回呼ぶと、0.1999999999・・・1か0.200000・・・1になります。 よくわからないけど、これはニュースかも。

という記憶がありますが、この場合は0+0で0ではありません。

 
transcendreamer:

と記憶していますが、この場合は0+0で、0ではありません。

どんな場合に?どのような場合にそうなるのか、例を挙げてください。
 
fxsaber:

本当なんですね!?はっきり言って、NDは比較のためだけに必要なのであって、表現するために必要なのではありません。そして、とっくに時代遅れになっている。

NormalizeDoubleは、保留中の注文とストップを置くときに価格を正規化するためにのみ必要です。それ以外には必要ありません。

このことは、ドキュメントに明記されています

計算されたStopLossとTakeProfitの値、および保留中の注文の建値は、Digits() で取得できる精度で正規化される必要があります。

 
Sergei Vladimirov:
具体的にはどのようなケースですか?どんな時にそうなるのか、例を挙げてください。

これは、変数に0があり、それに0が追加されたときに起こります。

(実際には0ではないのではと思われます)。

 
Slawa:

NormalizeDoubleは、保留中の注文とストップを置くときに価格を正規化するためにのみ必要です。それ以外には必要ありません。

このことは、ドキュメントに明記されています

しかし、実際の数字を比べてみるとどうだろう...。
 
transcendreamer:

これは、変数に0があり、それに0が追加されたときに起こります。

(実際には0ではないのではと思われます)。


その通りです。足し算と引き算の「本当の」ゼロは、ゼロのままです。だから、例を挙げたんです。

 
Alexander Bereznyak:
実数で比較するのはどうなんだろう...。

関連する副作用

便利であることがわかった。しかし、本来はこのような使い方は想定していない。

実数を正しい精度で印刷するための特別な機能があります。

教えてください、なぜ計算で実数を丸める必要があるのですか?なぜなら、この場合、計算の正確さが失われてしまうからです

 
Sergei Vladimirov:

その通りです。足し算と引き算の「本当の」ゼロは、やはりゼロなのです。だから、例を挙げたんです。

NormalizeDouble(new_lot-sum_lots,Lots_Digits); が正確に0を出力せず、末尾を保存しているのではないかと推測し始めたのです。
 
Slawa:

NormalizeDoubleは保留中の注文とストップを置くときに価格を正規化するためにのみ必要 です。それ以外には必要ありません。

このことは、ドキュメントに明記されています

時代遅れ

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

標準的な機能/アプローチの代替実装

レナート・ファットフーリン さん 2016.09.02 00:55

これでは過積載にならない。同じファンクションシグネチャーを使用しています。

しかし、考え方は明快で、ダニ粒状 化を考慮した正規化の機能です。