两个double数的对比
要用计算机要对比两个double数A和B方法一是假设如果两个数的差不大于e(e=0.000001),那么就认为A和B是相等的。
方法二是两数相除,如果得到的余数不大于e(e的大小和上面一样),也就认为A和B是相等的。
哪种方法更精确一点(就是说A和B更接近),谁能给出数学证明! 我觉得你的方法二有个前提吧, 就是商为1, 否则差太远了.
如果这样的话觉得第二种方法说到底也是一个减法来算余数, 而且还要先算商, 搞不好算出来还会乘回去, 总之蒸腾半天估计会有精确度损失. 第一种精确吧.
数学证明? 数学上两者是相等的吧, 问题是编译器内部算法. 感觉运算越简单越好 精度我说不好,但我就觉得做除法可能会比较慢。 原帖由 ─壶酒 于 2008-10-28 13:22 发表 http://www.dolc.de/forum/images/common/back.gif
大于 等于 小于,还有更精确一点的第四种情况吗? $m14$
高精度计算用 <, = , >不行。你可以试试看。 取决于 语言,无固定答案 原帖由 ─壶酒 于 2008-11-10 11:32 发表 http://www.dolc.de/forum/images/common/back.gif
这个版需要旺一点啊~~$汗$
你的意思是
如果 beta 属于
那么 beta == alpha为true 吧。
不错 如果B=A-e,第一种算法ok,第二种的话,就需要余数是负数,但是负的余数是不被普遍接受的吧!
如果余数是负数也可以的话,两个算法差不多,但是第一个要比第二个快,感觉上是这样。
还有,啥是double数啊?$考虑$
[ 本帖最后由 wanglong_pq 于 2008-11-16 18:21 编辑 ] 如果 |A-B|< e 就相等
第二种会损失精度的,而且运算起来效率低 经典的编程问题。:D 以前研究过。其实原理很简单,我在c++中实现的。竟可能的在误差允许的范围内把数字转换成字符串,然后字符串比较。因为字符串中的字符可以转换为普通int,然后再比较是否每一位字符都有相同的ascii码,自己写代码比较麻烦。如果你熟悉c++的话,boost库里里的数学库部分好像有个这个比较函数,可以做精确比较。 看你要求的新精度是多少,
如果A和B double值相近,可以找到 一个值 C 然后算
A-C = A'
B-C = B'
比较 A' * 10^x 和 B' * 10^x
页:
[1]