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