回 帖 发 新 帖 刷新版面

主题:关于算法准确性的一个小问题,谢谢。

#include "stdio.h"
#include <stdlib.h>
int main ()

     double x;    
     x = 0.2;
     printf("x=%2.17f\n",x);
     system("pause");
     return 0;
}


  在Dev-c++ 4.9.9.2中运行结果为:

     x=0.20000000000000001
     请按任意键继续. . .

  我想问的问题是:
1,c运行的准确性有这么差吗?
2,此类误差产生的原因是什么?

谢谢!

回复列表 (共2个回复)

沙发

这是C在数据存储中的问题。带浮点类型的变量在存储时会因为系统存储的关系产生一个极小的误差,所以很多经验丰富的程序员都会告诉你,类似类型的变量一般不能用==去判断相等,而是定义一个极小的值(如1E-17),判断两者差值是否小于该极小。

板凳

double类型的有效数字位数也只有15~16位,所以这个极小值不能取到10^-17

我来回复

您尚未登录,请登录后再回复。点此登录或注册