如何正确地比较两个double类型的数据

本文通过一个具体的编程实例,展示了直接比较两个浮点数(double类型)可能带来的问题,并提出了一种更合理的比较方法——使用一个很小的误差范围来进行判断。

今天写代码发现一个很有意思的问题。

代码如下:

double sum = 0;
for(i = 11213; i < 11325; i++) {
sum += v1[i];
}
printf("sum = %f\n", sum);
double sum2 = 66.144421;
if(sum == sum2) {
printf("sum = 66.144421 .\n");
} else {
printf("sum != 66.144421 .\n");
}
double a = 66.144421, b = 66.144421;
if (a == b) {
printf("a = b = 66.144421\n");
}
exit(0);



运行结果如下:



sum打印出来的值和sum2相等,但是与sum2进行比较的时候得到的结果却是不等的。这种现象应该跟double类型表示的精度有关。
所以当我们比较两个double值是否相等时,应该采用相减的方式。即:

double sum = 0;
for(i = 11213; i < 11325; i++) {
sum += v1[i];
}
printf("sum = %f\n", sum);
double sum2 = 66.144421;
if(sum - sum2 < 1e-6) {
printf("sum = 66.144421 .\n");
} else {
printf("sum != 66.144421 .\n");
}
double a = 66.144421, b = 66.144421;
if (a == b) {
printf("a = b = 66.144421\n");
}
exit(0);


在写代码的时候要特别注意这一点,如果程序因为这种原因发生问题,排查起来很困难。




内容概要:本文深入探讨了瑞芯微RK3588处理器适配双千兆网口的技术实现,涵盖硬件架构、驱动开发、网络配置及实际应用。详细介绍了RK3588的多核CPU、GPUNPU性能,以及双千兆网口通过RGMII和MDIO接口PHY芯片的连接原理。文章重点解析了设备树修改、内核驱动配置、Android系统下init.rc脚本设置IP路由、防火墙策略路由配置,并提供了C语言获取网口状态的代码示例。结合智能安防监控系统和边缘计算网关两大应用案例,展示了双千兆网口在高清视频传输、实时数据分析和多源设备接入中的关键作用。同时,介绍了iperf、ping等性能测试工具的使用方法,并从电源完整性、散热、驱动优化、MTU调整和硬件加速等方面提出性能优化策略。; 适合人群:具备嵌入式开发基础,熟悉Linux/Android系统开发,从事物联网、边缘计算、智能安防等相关领域的工程师和技术人员。; 使用场景及目标:①掌握RK3588平台双千兆网口的硬件连接驱动配置方法;②实现双网口独立通信策略路由配置;③在智能监控、工业网关等高带宽、低延迟场景中优化网络性能;④进行网络稳定性测试系统级调优。; 阅读建议:此资源理论实战结合紧密,建议读者在实际开发板上同步操作,重点理解设备树配置、网络服务脚本编写性能调优策略,并结合应用场景进行代码验证调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值