如何比较整型的0和double类型的0.0

如何比较整型的0和double类型的0.0

写在前面的话
1.由于计算机中采用的是有限位的二进制编码,所以浮点数在计算机中的存储不总是精确的,通常会存在一些舍入误差。
2.浮点数表示的数据类型往往具有不精确性,在进行精确度不高的运算时问题还不是很大,但是在进行关系运算时就会出现很大的问题。
3.判断两个浮点数是否相等这个操作本身就充满了风险,并且不合理。
为什么会出现这样的不精确现象呢?
计算机在存储数据类型时,是以二进制的形式存储的,对于double类型的数据也是一样。对于一个十进制的小数转化为二进制时,采用的方法是乘二取整,正序排列。即:对被转换的小数乘以2,取其整数部分(0或1)作为二进制小数部分,取其小数部分,再乘以2,又取其整数部分作为二进制小数部分,然后取小数部分,再乘以2,直到小数部分为0或者已经去到了足够位数。
接下来,我给大家举个例子,例如:十进制0.2转化为二进制。

			0.2 x 2 = 0.4 ............0
			0.4 x 2 = 0.8 ............0
			0.8 x 2 = 1.6 ............1
			0.6 x 2 = 1.2 ............1
			0.2 x 2 = 0.4 ............0

0.2乘以2,取整后小数部分再乘以2,运算4次后得到的整数部分依次为0、0、1、1,结果又变成了0.2,若果0.2再乘以2后会循环刚开始的4次运算,所以0.2转换二进制后将是001 1的循环,即: (0.2)10=(0.0011 0011 0011 …)2。由于任何数据类型都是有限制的,不能无限的使用计算机内存,这样导致数据出现了舍入误差。
浮点数0.0与整型0之间如何比较呢
如果一个数 a 在 [b-eps, b+eps] 的区间中时,就应当判断为 a==b 成立。经验表明, eps 取 10-8是一个合适的数字——对大多数的情况既不会漏判,也不会误判。

int main (void)
{
	double cosA = 0.0;

	if(cosA>=-0.000001 && cosA<=0.000001)
	{
		printf("整型0与浮点型0.0相等 ");
	}
}

这样就实现了整型的0和double类型的0.0的比较。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值