NormalizeDoubleによるMT4での数値の丸め方 - ページ 9 1234567891011121314151617 新しいコメント Lilita Bogachkova 2016.02.25 19:48 #81 Алексей Тарабанов: 丸めについて8ページ。昔は4年生で習ったような気がする :( すでに割礼の話も出ていますね :) Vladimir Suslov 2016.02.25 19:49 #82 Алексей Тарабанов: 丸めについて8ページ。昔は4年生で習ったような気がする :( 全てではありません;|。 削除済み 2016.02.25 19:55 #83 Dmitry Fedoseev: へぇー。それは逆だ。まったくもって間違った結果です。 例えば? 削除済み 2016.02.25 19:57 #84 lilita bogachkova:+++ただし、小数点以下15桁より長い数値の場合は、やはり何らかの方法でトリミングをしないと正しく動作しません。倍精度浮動小数点数は小数点以下15~17桁の精度 Lilita Bogachkova 2016.02.25 20:01 #85 Vasyl Nosal:倍精度浮動小数点数は、小数点以下15~17桁の精度を持つ//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { ushort Characters_delete=14; for(int i=0;i<=Characters_delete;i++) { double v1=1.123456789012345; v1=DoubleCrop(v1,i,Characters_delete); Print("v1 = ",i," = ",DoubleToString(v1,Characters_delete-i)); } Print("---"); } //+------------------------------------------------------------------+ //| Double Crop function | //+------------------------------------------------------------------+ double DoubleCrop(double value,int ii,ushort Characters) { string data="",resoult=""; data=DoubleToString(value,Characters); resoult=StringSubstr(data,0,StringLen(data)-ii); return StringToDouble(resoult); } //+------------------------------------------------------------------+0 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 0 = 1.123456789012350 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 1 = 1.12345678901230 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 2 = 1.1234567890120 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 3 = 1.123456789010 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 4 = 1.12345678900 21:59:20.485 !tests GBPUSDbc,H1: v1 = 5 = 1.123456789.0 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 6 = 1.123456780 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 7 = 1.1234567.0 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 8 = 1.1234560 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 9 = 1.123450 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 10 = 1.12340 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 11 = 1.123.0 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 12 = 1.120 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 13 = 1.10 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 14 = 1 ushort Characters_delete=15;0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 0 = 1.1234567890123450 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 1 = 1.123456789012340 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 2 = 1.12345678901230 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 3 = 1.1234567890120 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 4 = 1.123456789010 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 5 = 1.12345678900 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 6 = 1.123456789.0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 7 = 1.123456780 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 8 = 1.1234567.0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 9 = 1.1234560 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 10 = 1.123450 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 11 = 1.12340 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 12 = 1.123.0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 13 = 1.12.0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 14 = 1.10 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 15 = 1 ushort Characters_delete=15; for(int i=0;i<=Characters_delete;i++) { double v1=1.1234567890123456; v1=DoubleCrop(v1,i,Characters_delete); Print("v1 = ",i," = ",DoubleToString(v1,Characters_delete-i)); } Print("---"); }0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 0 = 1.1234567890123460 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 1 = 1.123456789012340 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 2 = 1.12345678901230 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 3 = 1.1234567890120 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 4 = 1.123456789010 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 5 = 1.12345678900 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 6 = 1.123456789.0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 7 = 1.123456780 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 8 = 1.1234567.0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 9 = 1.1234560 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 10 = 1.123450 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 11 = 1.12340 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 12 = 1.123.0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 13 = 1.12.0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 14 = 1.10 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 15 = 1 Rounding numbers in MT4 [アーカイブ!】純粋数学、物理学、化学など:トレードとは一切関係ない脳トレ問題集 [Archive!] Pure mathematics, physics, 削除済み 2016.02.25 20:03 #86 lilita bogachkova:0 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 0 = 1.123456789012350 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 1 = 1.12345678901230 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 2 = 1.1234567890120 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 3 = 1.123456789010 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 4 = 1.12345678900 21:59:20.485 !tests GBPUSDbc,H1: v1 = 5 = 1.123456789.0 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 6 = 1.123456780 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 7 = 1.1234567.0 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 8 = 1.1234560 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 9 = 1.123450 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 10 = 1.12340 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 11 = 1.123.0 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 12 = 1.120 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 13 = 1.10 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 14 = 10 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 0 = 1.1234567890123450 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 1 = 1.123456789012340 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 2 = 1.12345678901230 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 3 = 1.1234567890120 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 4 = 1.123456789010 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 5 = 1.12345678900 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 6 = 1.123456789.0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 7 = 1.123456780 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 8 = 1.1234567.0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 9 = 1.1234560 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 10 = 1.123450 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 11 = 1.12340 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 12 = 1.123.0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 13 = 1.12.0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 14 = 1.10 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 15 = 1 И? 削除済み 2016.02.25 20:09 #87 Vasyl Nosal: И?string data=DoubleToString(1.123456789012345,15); int lenth=StringLen(data); data=StringSubstr(data,0,lenth); Alert(data);2016.02.25 22:06:56.781 prob EURUSD,H1:Alert: 1.12345678901234517人以上のキャラクターがダブらないと割り切っています。他に必要なものはありますか? Алексей Тарабанов 2016.02.25 20:12 #88 lilita bogachkova: ここではすでに割礼の話も出ていますね :) 1980年代前半、ノギンスクのプログラミング学校を卒業したアントニーナ・ロセバが、私の指導のもとで仕事をしていた。整数への丸め誤魔化していた問題を、次のように解決した。int A = double B + 0.5 Dmitry Fedoseev 2016.02.25 20:16 #89 Vasyl Nosal: 例えば?DoubleToStr(0.9999,3)=1.000だから、結論を出してください。 Lilita Bogachkova 2016.02.25 20:17 #90 Vasyl Nosal:2016.02.25 22:06:56.781 prob EURUSD,H1: Alert: 1.12345678901234517人以上のキャラクターがダブらないと割り切っています。他に必要なものはありますか?14を 試し、その理由を説明するvoid OnStart() { ushort Characters_delete=14; for(int i=0;i<=Characters_delete;i++) { double v1=1.0/1.1; v1=DoubleCrop(v1,i,Characters_delete); Print("v1 = ",i," = ",DoubleToString(v1,Characters_delete-i)); } Print("---"); }0 22:15:05.379 !tests GBPUSDbc,H1: v1 = 0 = 0.90909090910 22:15:05.379 !tests GBPUSDbc,H1: v1 = 1 = 0.909090909.0 22:15:05.379 !tests GBPUSDbc,H1: v1 = 2 = 0.90909090900 22:15:05.379 !テスト GBPUSDbc,H1: v1 = 3 = 0.9090909090 22:15:05.379 !tests GBPUSDbc,H1: v1 = 4 = 0.90909090.0 22:15:05.379 !tests GBPUSDbc,H1: v1 = 5 = 0.909090909.0 22:15:05.379 !tests GBPUSDbc,H1: v1 = 6 = 0.909090900 22:15:05.379 !tests GBPUSDbc,H1: v1 = 7 = 0.9090909.0 22:15:05.379 !tests GBPUSDbc,H1: v1 = 8 = 0.909090.0 22:15:05.379 !tests GBPUSDbc,H1: v1 = 9 = 0.90909.0 22:15:05.379 !テスト GBPUSDbc,H1: v1 = 10 = 0.90900 22:15:05.379 !テスト GBPUSDbc,H1: v1 = 11 = 0.9090 22:15:05.379 !テスト GBPUSDbc,H1: v1 = 12 = 0.900 22:15:05.379 !テスト GBPUSDbc,H1: v1 = 13 = 0.90 22:15:05.379 !tests GBPUSDbc,H1: v1 = 14 = 0. Rounding numbers in MT4 [アーカイブ!】純粋数学、物理学、化学など:トレードとは一切関係ない脳トレ問題集 [Archive!] Pure mathematics, physics, 1234567891011121314151617 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
丸めについて8ページ。昔は4年生で習ったような気がする :(
丸めについて8ページ。昔は4年生で習ったような気がする :(
へぇー。それは逆だ。まったくもって間違った結果です。
+++
ただし、小数点以下15桁より長い数値の場合は、やはり何らかの方法でトリミングをしないと正しく動作しません。
倍精度浮動小数点数は、小数点以下15~17桁の精度を持つ
0 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 14 = 1
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 0 = 1.123456789012345
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 1 = 1.12345678901234
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 2 = 1.1234567890123
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 3 = 1.123456789012
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 4 = 1.12345678901
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 5 = 1.1234567890
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 6 = 1.123456789.
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 7 = 1.12345678
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 8 = 1.1234567.
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 9 = 1.123456
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 10 = 1.12345
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 11 = 1.1234
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 12 = 1.123.
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 13 = 1.12.
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 14 = 1.1
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 15 = 1
0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 0 = 1.123456789012346
0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 1 = 1.12345678901234
0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 2 = 1.1234567890123
0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 3 = 1.123456789012
0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 4 = 1.12345678901
0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 5 = 1.1234567890
0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 6 = 1.123456789.
0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 7 = 1.12345678
0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 8 = 1.1234567.
0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 9 = 1.123456
0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 10 = 1.12345
0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 11 = 1.1234
0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 12 = 1.123.
0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 13 = 1.12.
0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 14 = 1.1
0 22:02:48.826 !テスト GBPUSDbc,H1: v1 = 15 = 1
0 21:59:20.485 !テスト GBPUSDbc,H1: v1 = 14 = 1
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 0 = 1.123456789012345
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 1 = 1.12345678901234
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 2 = 1.1234567890123
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 3 = 1.123456789012
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 4 = 1.12345678901
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 5 = 1.1234567890
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 6 = 1.123456789.
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 7 = 1.12345678
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 8 = 1.1234567.
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 9 = 1.123456
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 10 = 1.12345
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 11 = 1.1234
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 12 = 1.123.
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 13 = 1.12.
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 14 = 1.1
0 22:01:25.346 !テスト GBPUSDbc,H1: v1 = 15 = 1
И?
2016.02.25 22:06:56.781 prob EURUSD,H1:Alert: 1.123456789012345
17人以上のキャラクターがダブらないと割り切っています。他に必要なものはありますか?
ここではすでに割礼の話も出ていますね :)
例えば?
DoubleToStr(0.9999,3)=1.000
だから、結論を出してください。
2016.02.25 22:06:56.781 prob EURUSD,H1: Alert: 1.123456789012345
17人以上のキャラクターがダブらないと割り切っています。他に必要なものはありますか?
14を 試し、その理由を説明する
0 22:15:05.379 !tests GBPUSDbc,H1: v1 = 0 = 0.9090909091
0 22:15:05.379 !tests GBPUSDbc,H1: v1 = 1 = 0.909090909.
0 22:15:05.379 !tests GBPUSDbc,H1: v1 = 2 = 0.9090909090
0 22:15:05.379 !テスト GBPUSDbc,H1: v1 = 3 = 0.909090909
0 22:15:05.379 !tests GBPUSDbc,H1: v1 = 4 = 0.90909090.
0 22:15:05.379 !tests GBPUSDbc,H1: v1 = 5 = 0.909090909.
0 22:15:05.379 !tests GBPUSDbc,H1: v1 = 6 = 0.90909090
0 22:15:05.379 !tests GBPUSDbc,H1: v1 = 7 = 0.9090909.
0 22:15:05.379 !tests GBPUSDbc,H1: v1 = 8 = 0.909090.
0 22:15:05.379 !tests GBPUSDbc,H1: v1 = 9 = 0.90909.
0 22:15:05.379 !テスト GBPUSDbc,H1: v1 = 10 = 0.9090
0 22:15:05.379 !テスト GBPUSDbc,H1: v1 = 11 = 0.909
0 22:15:05.379 !テスト GBPUSDbc,H1: v1 = 12 = 0.90
0 22:15:05.379 !テスト GBPUSDbc,H1: v1 = 13 = 0.9
0 22:15:05.379 !tests GBPUSDbc,H1: v1 = 14 = 0.