如何用if 判断double类型变量 为0?

伍丰 2013-11-27 12:13:58
如何用if 判断double变量 为0?
...全文
18021 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
熊熊大叔 2013-11-27
  • 打赏
  • 举报
回复
1楼正解, 2楼是典型错误 #define MIN_VALUE 1e-8 //根据需要调整这个值 #define IS_DOUBLE_ZERO(d) (abs(d) < MIN_VALUE)
sleeplacker 2013-11-27
  • 打赏
  • 举报
回复
我觉得这个方法更好
#include<iostream>

bool is_zero(const double &d)
{
	if (d)
	{
		return false;
	}
	else
	{
		return true;
	}
}

int main()
{
	double dval1 = 0;
	double dval2 = 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001;
	std::cout << "zero or not? " << is_zero(dval2) << std::endl;
	return 0;
}
你怎么了熊吉 2013-11-27
  • 打赏
  • 举报
回复
定一个精度范围,大于小于某个绝对值就视为0
starytx 2013-11-27
  • 打赏
  • 举报
回复
浮点型判断是否0值,只能判断其绝对值在某个精度范围内进行判断,不能直接 == 0来进行。可以这样 if(abs(x) < 0.000001) // 这个0.000001可以根据精度需要改为更小的
soarfish 2013-11-27
  • 打赏
  • 举报
回复
double类型的确是需要根据精度进行范围判断的。不能直接相等判断。
buyong 2013-11-27
  • 打赏
  • 举报
回复
double d=0.0; if(d==0) cout << "true" << endl; else cout << "false" << endl; output: true
Saleayas 2013-11-27
  • 打赏
  • 举报
回复
首先一个 double 是否为 0,或者其他的数值,是精确的,可以使用== 。 比如 double f = 0; 此时 f 是精确为 0 ,f == 0 为 true。 但是,double 在运算中,由于截尾的原因,总是有误差的。而此时是否为0,要看你的这个运算的精度要求。 比如运算后,f = 0.001,此时不能简单去和 e 去比较。
nice_cxf 2013-11-27
  • 打赏
  • 举报
回复
这个要看需求而定,没有统一标准,实际应该写个判相等的函数而不是判是否=0
赵4老师 2013-11-27
  • 打赏
  • 举报
回复
include\float.h
...
#define DBL_DIG         15                      /* # of decimal digits of precision */
#define DBL_EPSILON     2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */
#define DBL_MANT_DIG    53                      /* # of bits in mantissa */
#define DBL_MAX         1.7976931348623158e+308 /* max value */
#define DBL_MAX_10_EXP  308                     /* max decimal exponent */
#define DBL_MAX_EXP     1024                    /* max binary exponent */
#define DBL_MIN         2.2250738585072014e-308 /* min positive value */
#define DBL_MIN_10_EXP  (-307)                  /* min decimal exponent */
#define DBL_MIN_EXP     (-1021)                 /* min binary exponent */
#define _DBL_RADIX      2                       /* exponent radix */
#define _DBL_ROUNDS     1                       /* addition rounding: near */
...
#include <float.h>
#include <math.h>
...
if (fabs(d)<DBL_EPSILON)

64,635

社区成员

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

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