归一化的双重悖论 - 页 11 1...456789101112 新评论 pavlick_ 2015.03.19 02:32 #101 transcendreamer:困扰我的是,当我计算一个小数,将其归一化,写进一个变量,然后再次读取并归一化时,我得到的是尾数比如说basis[0]=NormalizeDouble(sum_A,2);GlobalVariableSet("Equity-"+portfolio_id,basis[0]); ...current=NormalizeDouble(GlobalVariableGet("Equity-"+portfolio_id),2);text = "Positions synchronized at " + current + " for portfolio: " + portfolio_name;if(!automatic) MessageBox(text,""); else Print(text);现在我已经把它改成text = "Positions synchronized at " + DoubleToStr(current,2) + " for portfolio: " + portfolio_name;if(!automatic) MessageBox(text,""); else Print(text);而且似乎没有任何尾巴,呜,呜......我已经写过了,我再重复一遍--有些数字不存在于二进制中。没有0.1,没有0.3和许多其他。无论你写多少次double val =NormalizeDouble(0.1434, 1),你都不会得到0.1,因为没有这样一个数字。例如,数字的表示方法如下。0.1 = 0.10000000000000001 0.2 = 0.2000000000001 0.3 = 0.2999999999999999999 0.4 = 0.400000000000002 0.6 = 0.59999999999999998但 0.125 = 0.125 0.25 = 0.25 0.5 = 0.5如果这非常令人不安,你要么需要四舍五入,要么自己写自行车来表示小数(可能有一些库,不感兴趣),不会使用fpu。而且在转换为字符串的过程中没有添加尾巴,它们最初就在那里。 NormalizeDouble paradox 初学者的问题 MQL5 MT5 MetaTrader 外汇系统 Dmitry Fedoseev 2015.03.19 02:59 #102 transcendreamer:所以我已经解决了我的问题,我们可以结束这个话题。解决办法:你必须强制四舍五入,即使在归一化之后也是如此。 错误的解决方案。在进行四舍五入时,你必须进行乘法、四舍五入、除法。在最后一次除法后,该数字将被非正常化。 Dmitry Fedoseev 2015.03.19 03:00 #103 transcendreamer:很有可能...但就最终的结果而言--有尾巴!... 正常化后没有尾巴。 pavlick_ 2015.03.19 03:13 #104 Integer: 归一化后没有尾巴。我认为你在误导这个人。你说归一化后没有尾巴是什么意思?只有在我们从一个数字中得到的字符串中才可能没有尾巴,并对数值进行了四舍五入(在字符串中已经四舍五入了,而不是在双倍中)。但在NormalizeDouble() 之后有尾巴。 pavlick_ 2015.03.19 03:18 #105 Integer: 错误的解决方案。在进行四舍五入时,你必须进行乘法、四舍五入、除法。在最后一次除法之后,这个数字将是非正常化的。你说的正常化是什么意思?斯特林格在这里说,该算法是这样的。double NormalizeDouble(double val, int digits) { val *= 10 ^ digits округляем к ближайшему целому val /= 10 ^ digits return val } Dmitry Fedoseev 2015.03.19 03:32 #106 pavlick_:我认为你在误导这个人。你说归一化后没有尾巴是什么意思?只有在我们从一个数字中得到的字符串中才可能没有尾巴,并对数值进行了四舍五入(在字符串中已经四舍五入了,而不是在双倍中)。而在NormalizeDouble()之后,有尾巴。 好吧,如果你喜欢相信我在误导别人,相信我。我在这里见过各种各样的人,我不会对你的 "原则性 "立场感到惊讶。 Dmitry Fedoseev 2015.03.19 03:33 #107 pavlick_:你说的正常化是什么意思?斯特林格在这里说,该算法是这样的。 你说的正常化是什么意思,会更有意思。 pavlick_ 2015.03.19 03:43 #108 Integer: 我在问你一个具体的问题,你却在给我浇水。解释和论证你的观点是有点正常的。 Dmitry Fedoseev 2015.03.19 03:51 #109 pavlick_: 我在问你一个具体的问题,你却在给我浇水。如何解释和论证自己的观点才算正常? 大声阅读教科书和文件,还是什么?或者大声朗读字典,关于 "大约 "一词? pavlick_ 2015.03.19 04:01 #110 Integer: 大声阅读教科书和文件还是什么?或者大声朗读字典,关于 "大约 "一词? 很明显,我们没有什么可谈的。如果你不对你的话负责的话,你最好不要参加谈话。 1...456789101112 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
困扰我的是,当我计算一个小数,将其归一化,写进一个变量,然后再次读取并归一化时,我得到的是尾数
比如说
basis[0]=NormalizeDouble(sum_A,2);
GlobalVariableSet("Equity-"+portfolio_id,basis[0]);
...
current=NormalizeDouble(GlobalVariableGet("Equity-"+portfolio_id),2);
text = "Positions synchronized at " + current + " for portfolio: " + portfolio_name;
if(!automatic) MessageBox(text,""); else Print(text);
现在我已经把它改成
text = "Positions synchronized at " + DoubleToStr(current,2) + " for portfolio: " + portfolio_name;
if(!automatic) MessageBox(text,""); else Print(text);
而且似乎没有任何尾巴,呜,呜......
我已经写过了,我再重复一遍--有些数字不存在于二进制中。没有0.1,没有0.3和许多其他。无论你写多少次double val =NormalizeDouble(0.1434, 1),你都不会得到0.1,因为没有这样一个数字。
例如,数字的表示方法如下。
0.1 = 0.10000000000000001
0.2 = 0.2000000000001
0.3 = 0.2999999999999999999
0.4 = 0.400000000000002
0.6 = 0.59999999999999998
但
0.125 = 0.125
0.25 = 0.25
0.5 = 0.5
如果这非常令人不安,你要么需要四舍五入,要么自己写自行车来表示小数(可能有一些库,不感兴趣),不会使用fpu。
而且在转换为字符串的过程中没有添加尾巴,它们最初就在那里。
所以我已经解决了我的问题,我们可以结束这个话题。
解决办法:你必须强制四舍五入,即使在归一化之后也是如此。
很有可能...但就最终的结果而言--有尾巴!
...
归一化后没有尾巴。
我认为你在误导这个人。你说归一化后没有尾巴是什么意思?只有在我们从一个数字中得到的字符串中才可能没有尾巴,并对数值进行了四舍五入(在字符串中已经四舍五入了,而不是在双倍中)。但在NormalizeDouble() 之后有尾巴。
错误的解决方案。在进行四舍五入时,你必须进行乘法、四舍五入、除法。在最后一次除法之后,这个数字将是非正常化的。
你说的正常化是什么意思?斯特林格在这里说,该算法是这样的。
我认为你在误导这个人。你说归一化后没有尾巴是什么意思?只有在我们从一个数字中得到的字符串中才可能没有尾巴,并对数值进行了四舍五入(在字符串中已经四舍五入了,而不是在双倍中)。而在NormalizeDouble()之后,有尾巴。
你说的正常化是什么意思?斯特林格在这里说,该算法是这样的。
我在问你一个具体的问题,你却在给我浇水。如何解释和论证自己的观点才算正常?
大声阅读教科书和文件还是什么?或者大声朗读字典,关于 "大约 "一词?