0.1 连续加 100 次后结果是多少 ???

来源:互联网 发布:淘宝品质高的女装店 编辑:程序博客网 时间:2024/05/30 04:32

   上次同学问我这个问题的时候,刚刚开始我也蒙咯,其实我知道答案不是10,但是不好说,最后发现自己忘了最基本的C的知识,惭愧啊!~~~

 

   首先感谢  struggle_simon 对我的错误的指出,非常感谢!本文的例子确实有问题!其实我要传达的意思就是后面的文字总结,大家可以不要看例子!呵呵~~再次感谢博友的指点!希望大家能多多提出错误,小弟当及时改之、、、、

 

#include <stdio.h>

int main()
{
 double s = 0;

 for( int i = 0; i < 99; i++)
 {
    s += 0.1;
 }

 printf("%lf\n", s);
 return 0;
}

你可以验证,答案不会是10,而是接近10的数9.99...

 

这是由于:计算机是以二进制方式储存值的,它的能力有限,不能计算无限循环的小数,他只能迁就数据类型的     字节数,只能 取到无限接近的数...所以当我们在设计程序时需要得到的只是最准确的值。

 

现在明白了那一题面试题中比较小数的时候,最标准的并不是 ( .lf == .lf ),而是 在目标数据中取一个非常小的 “ 邻域”进行比较,只要再次 “ 邻域 ”内就是OK的( 当然此“ 邻域 ”很小 )...


原创粉丝点击