C++编程中,在进行判断操作时需要注意的问题

 在实际开发过程中,由于遇到了关于float型数据比较大小的场景,好在及时发现了其中的坑,故在此做个记录,以便回顾。

直接上代码

// 输入一个数,判断该数是否在0.58±0.1这个区间中,如果在,就输出“正常”;否则输出“异常”

#include<iostream>
using namespace std;

int main() {
	float val = 0;
	cout << "please input a value:\n";
	while (cin>>val) {
		if (abs(val - 0.58) > 0.1) {
			cout << "异常\n" << endl;
		}
		else {
			cout << "正常\n" << endl;
		}
	}
	return 0;
}

测试用例与程序实际输出结果如下图所示:

从上图可以看到程序在临界值出现是判断错误,在参数为0.48和0.68时都应该输出“正常”,但实际输出的却是“异常”。

修改代码,添加精度补偿值后的代码如下:

#include<iostream>
using namespace std;

int main() {
	float precision = 0.000001f;// 精度补偿值
	float val = 0;
	cout << "please input a value:\n";
	while (cin>>val) {
		if (abs(val - 0.58) > (0.1 + precision)) {
			cout << "异常\n" << endl;
		}
		else {
			cout << "正常\n" << endl;
		}
	}
	return 0;
}

加入精度补偿后,结果都正确

再例如下面的代码

// 输入一个数,判断该数是否在0.44±0.1这个区间中,如果在,就输出“正常”;否则输出“异常”
#include<iostream>
using namespace std;

int main() {
	//float precision = 0.000001f;
	float val = 0;
	cout << "please input a value:\n";
	while (cin>>val) {
		if (abs(val - 0.44) > (0.1)) {
			cout << "异常\n" << endl;
		}
		else {
			cout << "正常\n" << endl;
		}
	}
	return 0;
}

测试用例与程序实际输出结果如下图所示:

从结果可以看到当参数为0.54的时候发生了异常,正常来说应该输出“正常”,实际却输出了“异常”

修改代码,加入精度补偿后结果如下:

#include<iostream>
using namespace std;

int main() {
	float precision = 0.000001f;
	float val = 0;
	cout << "please input a value:\n";
	while (cin>>val) {
		if (abs(val - 0.44) > (0.1 + precision)) {
			cout << "异常\n" << endl;
		}
		else {
			cout << "正常\n" << endl;
		}
	}
	return 0;
}

由此可见,在实际开发过程中,适当的加入精度补偿有助于提高程序的正确性,平时也应养成好习惯

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值