C语言中的浮点数舍入错误

给定一个数,加上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,如果发现本文有错误的地方欢迎批评、指正,若本文对您有所帮助,转发、分享也是笔者坚持的动力

关注南风过境蜻蜓飞,开启物联网、嵌入式学习之路

关注南风过境蜻蜓飞,开启物联网、嵌入式学习之路

猜你喜欢

转载自blog.csdn.net/qq_42965739/article/details/103375479