归一化的双重悖论 - 页 2 123456789...12 新评论 Vladimir Pastushak 2015.03.16 16:42 #11 transcendreamer: 模式的打破是,即使在归一化之后,仍然有尾巴! 归一化后没有尾巴......。不要误导人们。 חולםטרנסצנדר ᨖ 2015.03.16 19:58 #12 VOLDEMAR: 正常化后没有尾巴...不要误导人们。我不进入....但我有情况是这样的:我对一个数字进行归一化处理,将其写入终端的一个全局变量,然后读取它,再次进行归一化处理,得到的是尾数最后--我没有能力抓住这些尾巴--我只是用DoubleToStr(current,2)强行把它们切断。 Vladimir Pastushak 2015.03.16 20:14 #13 transcendreamer:我不进入....但我有情况是这样的:我对一个数字进行归一化处理,将其写入终端的一个全局变量,然后读取它,再次进行归一化处理,得到的是尾数结果是--没有精力去抓这些尾巴--我只是用DoubleToStr(current,2)把它们强行切下来。如果你把变量double规范化,比如说,规范化为5个字符,那么这个变量将存储5个字符,在raprinters之类的情况下,你把变量转换为不同的数据类型,这可能导致尾巴。但归一化后的双倍数没有尾巴...。为了不出现崩溃,你需要在应用点上做归一化处理,在计算过程中你不必... חולםטרנסצנדר ᨖ 2015.03.16 22:04 #14 VOLDEMAR:例如,如果你将一个双数变量规范化为5位数,该变量将存储5位数,在重新打印和其他事情的情况下,你将该变量转换为其他数据类型,结果可能会出现尾巴。但归一化后的双倍数中没有尾巴......为了不发生崩溃,归一化应该在应用点进行,你可能不会在计算过程中进行。 也就是说,如果我做了,比如说,一个转换(string)current那么在这个转换过程中,它能准确地给出尾数吗?不知道谢谢! Vladimir Pastushak 2015.03.17 08:06 #15 transcendreamer: 也就是说,如果我做了,比如说,一个转化的(string)current那么在这个转换过程中,它能不能准确地给出尾数?不知道。谢谢你! 是的,它可以,DoubleToString(, 5)是正确的。 Dmitry Fedoseev 2015.03.17 08:57 #16 stringo:NormalizeDouble的工作方式是这样的(从第一个MQL开始就一直是这样工作的)数字乘以10的幂,转换成整数形式(放弃小数部分),然后再除以10的幂。这里有什么问题呢?是否有模式中断?分数部分被扔掉了吗?四舍五入是通过以下方式进行的。归一化的双(1.25,1) = 1.3 Slava 2015.03.17 09:11 #17 Integer:分数部分是否被丢弃?进行四舍五入。归一化的双(1.25,1) = 1.3 是的,我忘了提到四舍五入。在得到一个整数时采用四舍五入的方法。 pavlick_ 2015.03.17 09:48 #18 transcendreamer: 因此,如果我做,比如说,转换(string)current那么在这个转换过程中,它能不能准确地给出尾数?不知道。谢谢你并非如此。二进制系统!=十进制系统。二进制小数位是0.5 / 0.25 / 0.125 / 0.0625 / 0.03125,等等。不可能将这些砖块的所有小数位加起来。例如,不可能把十进制数字0.3精确地拼在一起(你只能拼出一个近似值),在二进制系统中,它要么少一点,要么多一点。这条尾巴就是这样出现的。 只有能无余数地除以1/2^各次方的数字才能被准确表示。换句话说,当我们试图用二进制形式表示十进制数字时,我们会扭曲数字。 pavlick_ 2015.03.17 12:03 #19 这样的一个比喻。 我们已经习惯了这样一个事实,即不准确地写下一个操作的结果,1/3将不得不进行四舍五入。但在三元系统中,有一个确切的运算表示==0.1。如果我们的原生系统是三元制,而电脑使用的是十进制,当把数字0.1troic转换为三元制时,我们会对比特的垃圾感到惊讶。 חולםטרנסצנדר ᨖ 2015.03.17 12:30 #20 pavlick_: 这样的一个比喻。 我们习惯于不准确写下1/3运算的结果,我们必须四舍五入。但在三元系统中,有一个确切的运算表示==0,1。如果我们的原生系统是三元制,而电脑使用的是十进制,那么当把数字0.1troic转换为三元制时,我们就会对比特的垃圾感到惊讶。这倒是真的。但由于某些原因,即使是一分钱的计算器也能从内存中读取一个数字,并准确地返回写在那里的内容。你写下一个分数1.23,得到的结果正好是1.23,没有任何尾巴。诀窍就在这里。理论上说,用户应该不需要以二进制格式呈现数字这样的程序<bore模式关闭>。 123456789...12 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
模式的打破是,即使在归一化之后,仍然有尾巴!
正常化后没有尾巴...不要误导人们。
我不进入....但我有
情况是这样的:我对一个数字进行归一化处理,将其写入终端的一个全局变量,然后读取它,再次进行归一化处理,得到的是尾数
最后--我没有能力抓住这些尾巴--我只是用DoubleToStr(current,2)强行把它们切断。
我不进入....但我有
情况是这样的:我对一个数字进行归一化处理,将其写入终端的一个全局变量,然后读取它,再次进行归一化处理,得到的是尾数
结果是--没有精力去抓这些尾巴--我只是用DoubleToStr(current,2)把它们强行切下来。
如果你把变量double规范化,比如说,规范化为5个字符,那么这个变量将存储5个字符,在raprinters之类的情况下,你把变量转换为不同的数据类型,这可能导致尾巴。
但归一化后的双倍数没有尾巴...。
为了不出现崩溃,你需要在应用点上做归一化处理,在计算过程中你不必...
例如,如果你将一个双数变量规范化为5位数,该变量将存储5位数,在重新打印和其他事情的情况下,你将该变量转换为其他数据类型,结果可能会出现尾巴。
但归一化后的双倍数中没有尾巴......
为了不发生崩溃,归一化应该在应用点进行,你可能不会在计算过程中进行。
那么在这个转换过程中,它能准确地给出尾数吗?
不知道
谢谢!
也就是说,如果我做了,比如说,一个转化的
那么在这个转换过程中,它能不能准确地给出尾数?
不知道。
谢谢你!
NormalizeDouble的工作方式是这样的(从第一个MQL开始就一直是这样工作的)
数字乘以10的幂,转换成整数形式(放弃小数部分),然后再除以10的幂。
这里有什么问题呢?是否有模式中断?
分数部分被扔掉了吗?四舍五入是通过以下方式进行的。
归一化的双(1.25,1) = 1.3
分数部分是否被丢弃?进行四舍五入。
归一化的双(1.25,1) = 1.3
因此,如果我做,比如说,转换
那么在这个转换过程中,它能不能准确地给出尾数?
不知道。
谢谢你
并非如此。二进制系统!=十进制系统。二进制小数位是0.5 / 0.25 / 0.125 / 0.0625 / 0.03125,等等。不可能将这些砖块的所有小数位加起来。例如,不可能把十进制数字0.3精确地拼在一起(你只能拼出一个近似值),在二进制系统中,它要么少一点,要么多一点。这条尾巴就是这样出现的。
只有能无余数地除以1/2^各次方的数字才能被准确表示。
换句话说,当我们试图用二进制形式表示十进制数字时,我们会扭曲数字。
我们已经习惯了这样一个事实,即不准确地写下一个操作的结果,1/3将不得不进行四舍五入。但在三元系统中,有一个确切的运算表示==0.1。如果我们的原生系统是三元制,而电脑使用的是十进制,当把数字0.1troic转换为三元制时,我们会对比特的垃圾感到惊讶。
这样的一个比喻。
我们习惯于不准确写下1/3运算的结果,我们必须四舍五入。但在三元系统中,有一个确切的运算表示==0,1。如果我们的原生系统是三元制,而电脑使用的是十进制,那么当把数字0.1troic转换为三元制时,我们就会对比特的垃圾感到惊讶。
这倒是真的。
但由于某些原因,即使是一分钱的计算器也能从内存中读取一个数字,并准确地返回写在那里的内容。
你写下一个分数1.23,得到的结果正好是1.23,没有任何尾巴。
诀窍就在这里。
理论上说,用户应该不需要以二进制格式呈现数字这样的程序
<bore模式关闭>。