这个样本作业问题的答案是"1,000,000",但我不明白为什么:
以下代码的输出是什么?
int main(void) {
float k = 1;
while (k != k + 1) {
k = k + 1;
}
printf(“%g”, k); // %g means output a floating point variable in decimal
}
Run Code Online (Sandbox Code Playgroud)
如果程序无限期运行但不产生输出,请写INFINITE LOOP作为问题的答案.所有程序都编译运行.但是,它们可能包含或可能不包含严重错误.您应该假设int是四个字节.您应该假设float具有相当于六位小数的精度.你可以将你的答案四舍五入到最近的10的幂(例如,你可以说1000而不是2 10(即1024)).
我不明白为什么循环会终止.
pax*_*blo 15
由于浮点数不完美的简单原因,它不会永远运行.
在某些时候,k将变得足够大,以便添加1它将没有任何影响.
此时,k将等于k+1并且您的循环将退出.
只有当浮点数在某个范围内时,它们才能由一个单元区分.
例如,假设您有一个整数类型,其正整数和单十进制数指数的精度为3位十进制数.
有了这个,你可以完美地将数字0到999表示为000x10 0到999x10 0(因为10 0是1):
当你想代表1000时会发生什么?你需要使用100x10 1.这仍然很完美.
但是,使用此方案没有准确的方法来表示1001,您可以表示的下一个数字是101x10 1,即1010.
因此,当您添加1到1000时,您将获得最接近的匹配,即1000.
代码使用的是float变量.
如问题中所指定,float具有6位精度,这意味着第六位之后的任何数字都将是不准确的.因此,一旦你通过一百万,最后的数字将是不准确的,所以增加它可能没有任何影响.