好看的英文游戏名4:以下程序为什么会是死循环呢?

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/06 03:49:09
以下程序为什么会是死循环呢?
public static void main(String[] args){
double d = 0;
while (d != 10.0) {
d += 0.1;
}
}

浮点数之间比较相等不相等不能直接用“=”或“!=”,因为浮点数本身就是近似值,直接用“=”或“!=”通常会达不到预期的结果,这就是你的程序为什么会出现死循环的原因(并不是所有机器上都会出现死循环,这种问题具有不确定性)

比较浮点数是否相等可以用两个浮点数的差小于一个极小值,比如比较浮点数 a1, a2 是否相等可以这样写:
if(fabs(a1-a2) < 1e-10)
{
//相等
}
else
{
//不相等
}

对于你的问题只需将“!=”改为“<”或“<=”即可

这个应该不会是死循环吧
你可以自己跟踪一下,看它运行到d=10的时候,它是怎么处理的

不会出现死循环
运行此程序 什么事都没发生,就是d=10了。

我把你的程序改了一下:
double d = 0;
for(;d<10.0;)
{
d += 0.1;
Console.WriteLine(d.ToString());
}
运行的结果是

0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
3
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
4
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
5
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.99999999999999
6.09999999999999
6.19999999999999
6.29999999999999
6.39999999999999
6.49999999999999
6.59999999999999
6.69999999999999
6.79999999999999
6.89999999999999
6.99999999999999
7.09999999999999
7.19999999999999
7.29999999999999
7.39999999999999
7.49999999999999
7.59999999999999
7.69999999999999
7.79999999999999
7.89999999999999
7.99999999999999
8.09999999999999
8.19999999999999
8.29999999999999
8.39999999999999
8.49999999999999
8.59999999999999
8.69999999999999
8.79999999999998
8.89999999999998
8.99999999999998
9.09999999999998
9.19999999999998
9.29999999999998
9.39999999999998
9.49999999999998
9.59999999999998
9.69999999999998
9.79999999999998
9.89999999999998
9.99999999999998
10.1
Press any key to continue
你看到了。所以你的条件永远成立,所以会出现死循环。

浮点型相加不是像人工相加的那样。往往达不到预期目标