圆整错误——有关浮点型

来源:互联网 发布:双十一是天猫还是淘宝 编辑:程序博客网 时间:2024/05/21 11:05
暂时用C++的例子(引用《C++程序设计学习指导与习题答案 (第2版)》)。
示例2.14
#include<iostream>using namespace std;int main(){    //illustrates round-off error::    double x=1000/3.0;    //x=1000/3    cout<<"x="<<x<<endl;    double y=x-333.0;    //y=1/3    cout<<"y="<<y<<endl;    double z=3*y-1.0;    //z=3*(1/3)-1    cout<<"z="<<z<<endl;    if(z==0)        cout<<"z==0.\n";    else        cout<<"z does not equal 0.\n";    return 0;}

运行结果(本人用VC++6.0):
x=333.333
y=0.333333
z=-5.6843e-014
注意:z不等于0.
在准确的算术中,变量具有的值为x=333又1/3,y=1/3,z=0。但1/3无法准确地表示为一个浮点值。这种不精确性反映在z的余数值上。
因此最好避免测试浮点型的相等性。