gpt4 book ai didi

c - 为什么这个浮点循环在 1,000,000 处终止?

转载 作者:太空狗 更新时间:2023-10-29 15:09:46 25 4
gpt4 key购买 nike

这个家庭作业示例的答案是“1,000,000”,但我不明白为什么:

What is the output of the following code?

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
}

If the program runs indefinitely but produces no output, write INFINITE LOOP as the answer to the question. All of the programs compile and run. They may or may not contain serious errors, however. You should assume that int is four bytes. You should assume that float has the equivalent of six decimal digits of precision. You may round your answer off to the nearest power of 10 (e.g., you can say 1,000 instead of 210 (i.e., 1024)).

我不明白为什么循环会终止。

最佳答案

它不会永远运行,原因很简单, float 并不完美。

在某些时候,k 会变得足够大,因此向其加 1 将没有任何效果。

此时,k 将等于 k+1 并且您的循环将退出。

float 只有在一定范围内才能用单个单位区分。

例如,假设您有一个整数类型,其精度为正 整数 的 3 位小数位和一位小数位的指数。

有了这个,您可以将数字 0 到 999 完美地表示为 000x100 到 999x100(因为 100 是 1):

当你想表示 1000 时会发生什么?您需要使用 100x101。这仍然是完美的表现。

但是,没有用此方案表示 1001 的准确方法,您可以表示的下一个数字是 101x101,即 1010。

因此,当您将 1 加到 1000 时,您将得到最接近的匹配项,即 1000。

关于c - 为什么这个浮点循环在 1,000,000 处终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2144057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com