永发信息网

double i; for(i = 0; i != 10; i += 0.1) printf("%.1lf\n", i); 输出结果为何是死循环?

答案:4  悬赏:20  手机版
解决时间 2021-04-27 19:08
  • 提问者网友:王者佥
  • 2021-04-27 13:20
double i; for(i = 0; i != 10; i += 0.1) printf("%.1lf\n", i); 输出结果为何是死循环?
最佳答案
  • 五星知识达人网友:污到你湿
  • 2021-04-27 14:08
为什么要用i!=10,用i<10不行吗,c语言中double类型数据计算是有误差的,也就是说你每次加0.1,可能永远得不到整10,有可能是0.900001追问谢谢!我最开始也想到了这个问题——浮点数的陷阱,根本不可能精确到10。然后我将i的中间结果输出来,居然是10.0。既然有误差,为什么还要输出10.0?看来,有时不能问为什么,计算机就那样。改为:for(i = 0; i-10 < 0.01; i += 0.1),就正确地看到结果了。这是刘汝佳《算法竞赛入门经典》中的一道题。
全部回答
  • 1楼网友:山河有幸埋战骨
  • 2021-04-27 16:20
看错了,呵呵
符点数除去2的N次方外,其他的数都是近似值,如0.1,所以i永远不会等于10.
你打出的10.0并不是10.0,是因为你用的%.1lf输出的原因,你换作%.100lf输出试一下!看看结果是什么。
  • 2楼网友:行路难
  • 2021-04-27 15:17
i是不整形,i第次加0.1,不可能等于10,面是10.000000
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯