<分区>
通过执行这段代码:
float f = 1.0;
while (f != 0.0) {
f = f - 0.1;
printf("%.1f\n", f);
}
预计它会运行10次然后停止,但结果是它不可避免地进入堆栈溢出。即使我更改 while 循环,使 f 变为低于 1.0 的任何其他值,也会发生同样的情况;
有人愿意解释一下吗?
<分区>
通过执行这段代码:
float f = 1.0;
while (f != 0.0) {
f = f - 0.1;
printf("%.1f\n", f);
}
预计它会运行10次然后停止,但结果是它不可避免地进入堆栈溢出。即使我更改 while 循环,使 f 变为低于 1.0 的任何其他值,也会发生同样的情况;
有人愿意解释一下吗?
最佳答案
比较 float 是否相等是很危险的。 float
数字本质上是不精确的,因为没有足够的位来表示 float
数字的连续性质。
任何时候比较 float
时,您应该比较的是 float
是否在彼此的特定范围内。例如:
while ((f - 0.0) > 0.00001)
关于C:使用 float 的 while 循环永远不会终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55304196/