我有这段代码:
while (x < 10.0) {
x += y;
}
如果x
和y
是浮点数,显然如果添加它们,循环将无限继续。我不明白它怎么会通过10.似乎不可能不通过十,但它不符合我的教科书。
为什么?是因为浮点数会发生舍入吗?或者我错过了什么?
编辑:x
和y
严格按照
答案 0 :(得分:8)
您尚未告诉我们x
或y
的实际初始值,因此我们无法确定。但这里有一个例子说明为什么这可能不起作用:
class Main {
public static void main(String[] args) {
float x = 1.0f;
float y = 1e-8f;
float z = x + y;
System.out.printf("%g\n", x); // 1.00000
System.out.printf("%g\n", y); // 1.00000e-08
System.out.printf("%g\n", z); // 1.00000
System.out.printf("%g\n", z - x); // 0.00000
}
}
答案 1 :(得分:0)
你的y值可能是0或非常小,因此使循环运行为infinte或很长一段时间:
假设是
y = 0;
此循环将变为无限
while(x < 10.0) {
x += y;
}
答案 2 :(得分:0)
您使用的是Java吗?试试这个 -
while(x < 10.0f) {
x += y;
}
或
while(x < (float)10.0) {
x += y;
}