我有这个代码:
while (x < 10.0) {
x += y;
}
如果x
和y
是浮点数,显然如果添加它们,循环将无限继续。我不明白为什么它不会通过 10。似乎不可能不通过 10,但根据我的教科书却没有。
这是为什么?是因为浮点数会发生舍入吗?还是我错过了什么?
编辑:顺便说一句x
,y
严格来说是积极的
你还没有告诉我们x
or的实际初始值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
}
}
你在使用 Java 吗?试试这个 -
while(x < 10.0f) {
x += y;
}
或者
while(x < (float)10.0) {
x += y;
}
您的 y 值可能为 0 或非常小,因此使循环运行无限或很长时间:
假设如果
y = 0;
这个循环将无限循环
while(x < 10.0) {
x += y;
}