C语言:逻辑表达式中不能使用浮点数进行==和!=的解决方法

一、问题
在C语言中,不能使用浮点数进行==和!=运算,比如以下代码:

#include<stdio.h>

int main()
{
	float  a = 3.14;
	if (a == 3.14)
	{
		printf("%f",a);
	}
	return 0;
}

运行后会报错,如下:
在这里插入图片描述
二、原因
C语言中,==!=是双目运算符,在进行运算时会把两边的数或者变量转换成二进制数来进行对比,从而来判断其相等或是不等。
对于整数来说,可以将之转换为对应确定的二进制数;但对于浮点数来说,浮点数不一定能转换成确定的二进制数,有可能只能转换为无限循环的二进制数,这样一来就无法来进行==!=运算操作。

浮点数转换为二进制的方法:整数部分与小数部分分开转换,例如3.25。整数部分为11;
小数部分的转换方法是:将小数部分一直乘2,直到没有小数。每次乘2后,如果超过1,则减去1,小数部分继续乘2。每乘一次,就把整数部分提取出来,作为二进制数。
如3.25,小数0.252=0.5, 0.52=1
小数 —> 提取整数
0.5 -----> 0
1 -------> 1
所以小数部分为01。
所以3.25=11.01。验证:11.01 = 1 * 2 + 1 + 0 * 2 ^ (-1) + 1 * 2 ^ (-2)=2+1+0+0.25=3.25。

三、解决方法
判断两个数相等或者不相等,我们可以转换成两个数之差是否为0。
比如a=b,变成a-b=0。所以我们只需考虑一个数或者变量与0的关系即可。
所以,C语言中==!=可以用<和>代替。具体如下:
1、针对float

a == 0------>a > -1e-15 && a< 1e15

例如:

#include<stdio.h>

int main()
{
	float  a = 3.14;
	if (a == 0)
	{
		printf("%f",a);
	}
	return 0;
}

可以替换成:

#include<stdio.h>
int main()
{
	float a = 3.14;
	if (a > -1e-6 && a< 1e6)
	{
		printf("%f",a);
	}
	return 0;
}

2、double型
同理:

a == 0------>a > -1e-15 && a< 1e15
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

树下等苹果

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值