本文共 540 字,大约阅读时间需要 1 分钟。
上次同学问我这个问题的时候,刚刚开始我也蒙咯,其实我知道答案不是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的( 当然此“ 邻域 ”很小 )...
转载地址:http://poaci.baihongyu.com/