在我自己电脑上运行出错,错在哪
是算法竞赛入门经典中的
看上去是很简单的代码,是double和float的问题
?
程序输出结果应该是多少
应该是精度导致的问题,把 i !=10 改成 i<10
计算机在存储浮点型数据的时候,会有0.0000001的偏差,所以用 i !=10的时候,无法正确结束循环。
代码修改如下:
#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