萍聚社区-德国热线-德国实用信息网

 找回密码
 注册

微信登录

微信扫一扫,快速登录

萍聚头条

查看: 2329|回复: 9

两个double数的对比

[复制链接]
发表于 2008-10-14 18:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x
要用计算机要对比两个double数A和B
方法一是假设如果两个数的差不大于e(e=0.000001),那么就认为A和B是相等的。
方法二是两数相除,如果得到的余数不大于e(e的大小和上面一样),也就认为A和B是相等的。
哪种方法更精确一点(就是说A和B更接近),谁能给出数学证明!
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-10-17 19:13 | 显示全部楼层
我觉得你的方法二有个前提吧, 就是商为1, 否则差太远了.
如果这样的话觉得第二种方法说到底也是一个减法来算余数, 而且还要先算商, 搞不好算出来还会乘回去, 总之蒸腾半天估计会有精确度损失. 第一种精确吧.
数学证明? 数学上两者是相等的吧, 问题是编译器内部算法. 感觉运算越简单越好
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-10-21 02:47 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-11-7 00:52 | 显示全部楼层
原帖由 ─壶酒 于 2008-10-28 13:22 发表
大于 等于 小于,还有更精确一点的第四种情况吗? $m14$

高精度计算用 <, = , >不行。你可以试试看。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-11-7 14:17 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
 楼主| 发表于 2008-11-10 20:10 | 显示全部楼层
原帖由 ─壶酒 于 2008-11-10 11:32 发表
这个版需要旺一点啊~~$汗$

你的意思是

如果 beta 属于 [alpha - eps ,  alpha + eps ]

那么 beta == alpha  为true 吧。


不错
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-11-16 19:19 | 显示全部楼层
如果B=A-e,第一种算法ok,第二种的话,就需要余数是负数,但是负的余数是不被普遍接受的吧!
如果余数是负数也可以的话,两个算法差不多,但是第一个要比第二个快,感觉上是这样。

还有,啥是double数啊?$考虑$

[ 本帖最后由 wanglong_pq 于 2008-11-16 18:21 编辑 ]
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-11-25 22:53 | 显示全部楼层
如果 |A-B|< e 就相等
第二种会损失精度的,而且运算起来效率低
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-12-11 01:52 | 显示全部楼层
经典的编程问题。:D 以前研究过。其实原理很简单,我在c++中实现的。竟可能的在误差允许的范围内把数字转换成字符串,然后字符串比较。因为字符串中的字符可以转换为普通int,然后再比较是否每一位字符都有相同的ascii码,自己写代码比较麻烦。如果你熟悉c++的话,boost库里里的数学库部分好像有个这个比较函数,可以做精确比较。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-12-11 09:08 | 显示全部楼层
看你要求的新精度是多少,
如果A和B double值相近,可以找到 一个值 C 然后算
A-C = A'
B-C = B'
比较 A' * 10^x 和 B' * 10^x
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

手机版|Archiver|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网 |网站地图

GMT+2, 2024-4-28 20:13 , Processed in 0.060497 second(s), 20 queries , MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表