C++之浮点数一例

C++ primer Plus 第六版 P58

先上代码

// fltadd.cpp -- precision problems with float
#include <iostream>
int main()
{
    using namespace std;
    float a = 2.34E+22f;
    float b = a + 1.0f;

    cout << "a = " << a << endl;
    cout << "b - a = " << b - a << endl;
    return 0; 
}
  • 结果分析:
    输出结果为:

    a = 2.34e+022
    b - a = 0
    • 该程序按理说加上数字1,再减去原来的数字,结果为1.但是输出结果却为 0 ;
      原因是 2.23E+022 是一个小数点左边有23位数字,而float类型只能表示数字中的前6位。因此加1,是在第23位加1 ,不会对输出结果有影响;
    • 同时,将float修改为double,则输出结果还是0,因为double的有效位为16.
    • 若修改为 float a = 2.34E+6f;输出结果为b - a = 1;若修改为 float a = 2.34E+7f;输出结果为b - a = 0;

发表评论