给定一个数,加上1,再减去原来给定的书,结果是多少呢?大部分人会认为是1,下面,通过浮点运算带给大家不一样的答案
1、案例程序:
#include <stdio.h>
int main (void)
{
float a, b;
b = 2.0e20 + 1.0;
a = b - 2.0e20;
printf("%f \n",a);
return 0;
}
2、输出结果
经过编译,运行,得到的结果如下:
可见,结果并不为1,而是4008175468544.000000
3、分析原因
- 造成该输出结果的原因是浮点数舍入错误,计算机缺少足够的小数位来完成正确的运算。
- 2.0e20是2后面有20个0.如果把该浮点数加1,那么变化的是第21位。要正确运算,程序至少要存储21位数字。而float类型的数字通常只能存储按指数比例缩小或放大的6或7位有限数字。按上面程序的运算,计算结果肯定是错的。
- 在该例中,如果把指数为20改为小于7的数,计算结果就没问题,只要保证float类型的精度足够运行这样的计算就没有问题,比如把2.0e20改为2.0e4,计算过程中2.0e4加1只需要改变第5位上的数字,满足float类型的计算精度
--- 完 ---
参考C Primer Plus,如果发现本文有错误的地方欢迎批评、指正,若本文对您有所帮助,转发、分享也是笔者坚持的动力
关注南风过境蜻蜓飞,开启物联网、嵌入式学习之路