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

   上次同学问我这个问题的时候,刚刚开始我也蒙咯,其实我知道答案不是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的( 当然此“ 邻域 ”很小 )...


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值