以下程序为什么会是死循环呢?

来源:百度知道 编辑:UC知道 时间:2024/06/19 05:27:41
以下程序为什么会是死循环呢?
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