这个字符串会被打印多少次?

时间:2017-02-27 09:43:39

标签: c

我在考试中看到了这段代码:问题是这个字符串的打印次数。

我首先想到它会是10次,但这是错误的。 有人能告诉我为什么我的答案是错的。 这是C语言代码的一部分。

for (float x = 100000001.0f; x <= 100000010.0f; x += 1.0f) {
    printf("lbc");
}

2 个答案:

答案 0 :(得分:7)

假设x是32位浮点:

浮点值的分辨率有限。 1000000011*10^8,因此您最后会丢失1。如果您要添加1,它会再次丢失,因为下一个浮点值为1.00000008*10^8。您可以根据需要添加任意数量1,结果将始终相同。

这就是你的代码无限循环的原因。

答案 1 :(得分:5)

float x = 100000001.0f;

将使用最近的可表示x初始化float,即100000000。将1添加到此值将导致相同的值。

如果您在循环中打印x的值,您会看到会发生什么:http://ideone.com/3FJGTz