おはこんばんちは
このヘルプセクションをいくら読んでも、最後の端数の1がどこから来ているのかがわからないのです。
正規化された数値をPrint()でJournalに出力する場合、予想以上に小数点 以下が含まれる可能性があることに留意してください。例えば、こんな感じです。
double a=76.671;// 小数点以下3桁の正規化された数値
Print("Print(76.671)=",a);// そのまま 印刷
Print("DoubleToString(a,8)=",DoubleToString(a,8));// 指定された精度で印刷 するがターミナルに出力されます。
DoubleToString(a,8)=76.67100000
Print(76.671)=76.67100000000001
ダブルタイプは精度に限界があり、誤差が生じる可能性があります。
- 2009.11.02
- MetaQuotes Software Corp.
- www.mql5.com
おすすめがわかりました、ありがとうございます。
を出力する際にDoubleToStrを使用することができます。
が、そもそもあれがどこから出てきたのかが不明なのです
割り算・掛け算をやっていたら、OK、エラーになるんです。
しかし、私が自分で処方した定数で?
最初は この精度を持たない定数に対して丸めを使わなければならないことがわかりました。
そして最も重要なことは、double変数に実際に格納されているものへの信頼が損なわれてしまうことです!
ドキュメントより 引用
Необходимо помнить, что вещественные числа хранятся в памяти компьютера с некоторой ограниченной точностью в двоичной системе счисления, в то время как общепринятой в использовании является десятичная система счисления. Поэтому многие числа, которые точно записываются в десятичной системе, в двоичной системе можно записать только в виде бесконечной дроби.
例えば、0.3や0.7という数字はコンピュータの中では無限の分数として表現されるが、0.25という数字は2のべき乗として正確に記憶されるのである。
で、以下のコードがなぜ 0000000001 のテールを出力するのか、まだ説明がつきません。
current=NormalizeDouble(GlobalVariableGet("Equity-"+portfolio_id),2);
text = "Positions closed at " + (string)current + " for portfolio: " + portfolio_name;
if(!automatic) MessageBox(text,""); else Print(text);
正規化を行ったため
と、まだ尾を引いている。
text = "ポートフォリオ:" + "ポートフォリオ名 "のポジションは" + (string)current + "で終了しました。
DoubleTo String を current にすれば問題ない。
そう、丸めを強制する必要があることに、すでに気づいていたのです
NormalizeDoubleは 明らかに失敗しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
こんにちは。
このヘルプセクションをいくら読んでも、最後の端数の1がどこから来ているのかがわからないのです。