来自算法竞赛入门经典

在我自己电脑上运行出错,错在哪
是算法竞赛入门经典中的
看上去是很简单的代码,是double和float的问题

程序输出结果应该是多少

img

应该是精度导致的问题,把 i !=10 改成 i<10
计算机在存储浮点型数据的时候,会有0.0000001的偏差,所以用 i !=10的时候,无法正确结束循环。
代码修改如下:

img

#include <stdio.h>
int main()
{
    double i;
    for (i=0;i < 10;i+=0.1)
        printf("%.1f\n",i);
    return 0;
}

运行死循环,循环条件永远成立。

由于计算机中采用的是有限位的二进制编码,所以浮点数在计算机中的存储不总是精确的,通常会存在一些舍入误差
你的i是double类型每次加0.1和10 比较精度会影响,因为可能是10.00001和10相比,所以不能直接相等来判断
可以每次取整型判断或者i<10.000001

代码没有问题吧,肯定能运行出结果。

但是这里要注意的是double类型的值做终结判断,额,反正我试了,!= 判断是不成功的,可能与精度有关,
或者这样写:for (i = 0; (int)i != 10; i += 0.1)
可能与编译器,使用工具也有关,我用的vs2019

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632