如何比较两个double型数据的大小?

Fungyun 2012-03-27 04:44:42
因为精度丢失不能用>、<、==、!=,之前看网上的分享都是在于0作比较,那对于两个都是double的数据怎么判断哪个大、哪个小,亦或是两个相等?谢谢解答。
...全文
73034 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
nice_cxf 2014-09-23
  • 打赏
  • 举报
回复
引用 12 楼 yushui213 的回复:
[quote=引用 10 楼 nice_cxf 的回复:] 被精度问题误导的人实在太多了。。。 两个有效的double是可以直接判==的而不用搞什么相减和一个极小数相比 也就是说两个double之间,>、<、==、!=,<=,>=都是可以直接用的
对于直接的两个double是可以比较的,但是如果是对某两组double数据(比如每组包括3、4个double类型)进行运算后(比较加减乘除运算后),采用与极小数比较是相对可靠的,因为每个源double数据进行运算后,其精度会进一步发生该表,导致结果误差较大。[/quote] 说的没错,但是这个极小数是多少呢?实际取决于你数据的大小,数据越大,这个极小数也要变得相对大才有意义,比如float,如果数据是12345679这么大的话,那么这个极小数如果小于1,实际上一点意义都没有,跟==一点区别都没有,而如果这个数定大了,比如0.0001,如果你的数据在1附近,那么可能造成精度不够,实际要根据具体情况,根据值不同具体应用,而现在的很多书,对于浮点数,都是直接给的0.0000001等数,未必就比==好
Ethan_yushui213 2014-09-22
  • 打赏
  • 举报
回复
引用 10 楼 nice_cxf 的回复:
被精度问题误导的人实在太多了。。。 两个有效的double是可以直接判==的而不用搞什么相减和一个极小数相比 也就是说两个double之间,>、<、==、!=,<=,>=都是可以直接用的
对于直接的两个double是可以比较的,但是如果是对某两组double数据(比如每组包括3、4个double类型)进行运算后(比较加减乘除运算后),采用与极小数比较是相对可靠的,因为每个源double数据进行运算后,其精度会进一步发生该表,导致结果误差较大。
ndjk454164628 2012-07-28
  • 打赏
  • 举报
回复
晕了有点儿
nice_cxf 2012-03-28
  • 打赏
  • 举报
回复
被精度问题误导的人实在太多了。。。
两个有效的double是可以直接判==的而不用搞什么相减和一个极小数相比
也就是说两个double之间,>、<、==、!=,<=,>=都是可以直接用的
Song9007206710328 2012-03-27
  • 打赏
  • 举报
回复
规范是楼上的写法,相减与一个极小数比较
Song9007206710328 2012-03-27
  • 打赏
  • 举报
回复
规范是楼上的写法,相减与一个极小数比较
hen_hao_ji 2012-03-27
  • 打赏
  • 举报
回复

#include <iostream>
#define eps 1e-8 //自己先定义精度
using namespace std;

int main()
{
double a,b;
a = 1.34234343;
b = 1.32323;
if (a - b > eps)
{
}
return 0;
}
  • 打赏
  • 举报
回复
将两个double类型的变量相减,然后判断它们的差在一定的范围内就认为相等,否则根据相减的结果的符号来判断大小。

比如:double d1,d2;
const double d = 0.0001;

if(d1 - d2 > -d && d1 - d2 < d);
认为d1与d2相等,否则不相等
baichi4141 2012-03-27
  • 打赏
  • 举报
回复
通过相减之差是否足够接近零来判断是否相等
不相等的话直接用大于号小于号判断大小

精度丢失跟大于小于一点关系都没有。
whuzqc 2012-03-27
  • 打赏
  • 举报
回复
可不可以想减,然后将减得的数与0作比较,在一定范围内就算相等了。
蓝枫10 2012-03-27
  • 打赏
  • 举报
回复
相差范围应该在某个精度···
因为在double中存的数本来就不是一个精确的数···
W170532934 2012-03-27
  • 打赏
  • 举报
回复
一般可以减去一个比较小的值。比如e-10
www_adintr_com 2012-03-27
  • 打赏
  • 举报
回复
大小直接比较, 相等比较他们的差值在一定的误差范围内就认为是相等了.

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧