C:使用 float 的 while 循环永远不会终止

标签 c floating-point precision

<分区>

通过执行这段代码:

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/

相关文章:

c++ - 将符号位、指数和尾数转换为 float ?

c - 为什么在我的例子中多线程比顺序编程慢?

c - 如何可移植地将变量声明为线程本地变量?

c - Int 和Float 指针。有人可以解释一下输出吗

c++ - 将 float 数组与 int 数组进行比较

c - 努力弄清楚如何编写某个函数

c++ - FPU,SSE 单 float 。哪个更快?低于或高于

algorithm - 如何最好地总结大量 float ?

c++ - C++中long double的精度是多少?

arrays - 循环中的数组可能会丢失精度误差