浮点型数据和0进行比较的探究

本文探讨了在不同编译器环境下,浮点数运算可能导致的精度问题,并提供了一种解决方案来判断两个浮点数是否相等。

问题提出:

int main()
{
	double i = 20.0;
	double j = i / 7.0;
	if (j * 7.0 == i)
		printf(“equal\n”);
	else
		printf(“not equal\n”);
	return 0;
}

上述代码在vs编译器下的运行结果为equal,在Linux环境下运行结果为not equal。造成这种结果的原因是什么?

知识储配:浮点数在内存中的存储方式:浮点数是怎么存储的

分析原因:

因为浮点数在内存中的存储方式使得,有些浮点数在内存中无法精确的存储,这样就必然有精度的丢失。一旦丢失就可能计算不够准确。无法使用 == 直接判断两个浮点数相等。

问题解决:

设置一个能接受的精度,保证误差在精度范围内就可以了

#define EXP 0.0000000001
float f = 0.0000001;
if(((f-21.0) > -EXP)&&((f-21.0) < EXP))    //判断f==21
{
	//就意味着f是无限接近0的数字,就约等于0
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值