我在考试中看到了这段代码:问题是这个字符串的打印次数。
我首先想到它会是10次,但这是错误的。 有人能告诉我为什么我的答案是错的。 这是C语言代码的一部分。
for (float x = 100000001.0f; x <= 100000010.0f; x += 1.0f) {
printf("lbc");
}
答案 0 :(得分:7)
假设x
是32位浮点:
浮点值的分辨率有限。 100000001
为1*10^8
,因此您最后会丢失1
。如果您要添加1
,它会再次丢失,因为下一个浮点值为1.00000008*10^8
。您可以根据需要添加任意数量1
,结果将始终相同。
这就是你的代码无限循环的原因。
答案 1 :(得分:5)
float x = 100000001.0f;
将使用最近的可表示x
初始化float
,即100000000
。将1
添加到此值将导致相同的值。
如果您在循环中打印x
的值,您会看到会发生什么:http://ideone.com/3FJGTz