NormalizeDoubleによるMT4での数値の丸め方 - ページ 13 1...67891011121314151617 新しいコメント Lilita Bogachkova 2016.02.25 22:44 #121 Алексей Тарабанов: 悪魔が混じっている...。もちろん、2.6です。 寝る時間だ。 Алексей Тарабанов 2016.02.25 22:47 #122 lilita bogachkova: もう寝る時間だ。 参加方法 削除済み 2016.02.25 22:58 #123 Dmitry Fedoseev: 5って何?このような数字を正規化すると、9がすべて0になってしまうので、正規化してから捨てると間違った結果になります。DoubleToString(0.99999,5) Dmitry Fedoseev 2016.02.26 00:05 #124 Vasyl Nosal: DoubleToString(0.99999,5)では、0.99999という数字で、2桁を残さなければならない場合はどうでしょうか。残りは破棄してください。0.99を獲得する必要がある。そこで、上で提案したアルゴリズムに従って、3桁に正規化すると、1.000となり、1つ捨てると1.00となるが、0.99にはならない。 削除済み 2016.02.26 00:56 #125 Dmitry Fedoseev:では、0.99999という数字で、2桁を残さなければならない場合はどうでしょうか。残りは破棄してください。0.99を獲得する必要がある。そこで、3桁に正規化して1.000とし、1つ捨てて1.00とするが、0.99にはしない。extern ushort Characters_delete = 3; /////////////////////////////////////////// string data=DoubleToString(0.99999,5); string resoult=StringSubstr(data,0,StringLen(data)-Characters_delete); Dmitry Fedoseev 2016.02.26 01:00 #126 Vasyl Nosal: そう...そして突然、0.999999ではなく、0.999999という数字が出てきたんだ。 削除済み 2016.02.26 01:02 #127 Dmitry Fedoseev: そう...そして突然、0.999999ではなく、0.999999という数字が出てきたんだ。string(0.999999) Dmitry Fedoseev 2016.02.26 01:03 #128 プログラマーが行方不明になったという逸話を思い出しますね。そして、「石鹸、リンス、繰り返し」の指示でシャンプーを手に、冷たい風呂に座っている。 削除済み 2016.02.26 06:11 #129 Dmitry Fedoseev: プログラマーが行方不明になったというジョークを思い出す。冷たい風呂に入り、シャンプーを手に「石鹸、リンス、繰り返し」の指示で座っていた。 例えば「0.7」という数字が、実際には「0.69999...」と格納されるような精度が、なぜ言語には必要なのだろうか。これは実際にどこかで使われているのでしょうか?電卓のように数字を数えるのに慣れていると、正確に表示されるんです。そうですね、おそらく電卓自体が何かを丸め、正確な数値 そのものを記憶していないのでしょう...。正確な値ではなく、このような無限小数による近似値を使う必要があるのは誰なのでしょうか?それを割って0.7を求め、トリミングや四捨五入を気にする必要はありません :-) Lilita Bogachkova 2016.02.26 06:16 #130 Dmitry Fedoseev:では、0.99999という数字で、2桁を残さなければならない場合はどうでしょうか。残りは破棄してください。0.99を獲得する必要がある。そこで、上で提案したアルゴリズムに従って、3桁に正規化すると、1.000となり、1つ捨てると1.00となるが、0.99にはならない。0.9999999999の 結果を得るようにするX = 0.9999999999999999910*X = 10*0.9999999999999999910*x-x = 10*0.9999999999-0.999999999*X = 9*0.99999999999999999となり、9*X = 9 または X = 1 (1)となる。void OnStart() { double v1=1.0/3.0; double v2=3.0*v1; Print("v1 = (1/3) = ",DoubleToString(v1)," | ","v2 = 3*(1/3) = ",DoubleToString(v2)); }v1 = (1/3) = 0.33333333|v2 = 3*(1/3) = 1.00000000または0.9999999999=1.0void OnStart() { double v1=0.99999999999999999; if(v1>=1.0) Print("v1 (",DoubleToString(v1),") >= 1.0"); }v1 (1.00000000) >= 1.0 1...67891011121314151617 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
悪魔が混じっている...。もちろん、2.6です。
もう寝る時間だ。
5って何?このような数字を正規化すると、9がすべて0になってしまうので、正規化してから捨てると間違った結果になります。
DoubleToString(0.99999,5)
では、0.99999という数字で、2桁を残さなければならない場合はどうでしょうか。残りは破棄してください。0.99を獲得する必要がある。そこで、上で提案したアルゴリズムに従って、3桁に正規化すると、1.000となり、1つ捨てると1.00となるが、0.99にはならない。
では、0.99999という数字で、2桁を残さなければならない場合はどうでしょうか。残りは破棄してください。0.99を獲得する必要がある。そこで、3桁に正規化して1.000とし、1つ捨てて1.00とするが、0.99にはしない。
そう...そして突然、0.999999ではなく、0.999999という数字が出てきたんだ。
プログラマーが行方不明になったというジョークを思い出す。冷たい風呂に入り、シャンプーを手に「石鹸、リンス、繰り返し」の指示で座っていた。
では、0.99999という数字で、2桁を残さなければならない場合はどうでしょうか。残りは破棄してください。0.99を獲得する必要がある。そこで、上で提案したアルゴリズムに従って、3桁に正規化すると、1.000となり、1つ捨てると1.00となるが、0.99にはならない。
0.9999999999の 結果を得るようにする
X = 0.99999999999999999
10*X = 10*0.99999999999999999
10*x-x = 10*0.9999999999-0.99999999
9*X = 9*0.99999999999999999
となり、9*X = 9 または X = 1 (1)となる。
v1 = (1/3) = 0.33333333|v2 = 3*(1/3) = 1.00000000
または0.9999999999=1.0
v1 (1.00000000) >= 1.0