c - 理解 c 中的 float 有问题。为什么它会进入无限循环?

标签 c loops floating-point

我正在尝试更新我的 C 知识,但我遇到了 float 错误。

例如这个循环将是无限的:

#include <stdio.h>

int main(){

    for (float i =18000000; i<18000002; i++){
        printf("%f\n", i);
    }
    printf("win\n");
    return 0;
}

为什么会这样?..

最佳答案

float 的精度有限。假设它在 IEEE754 单精度浮点中实现,它只有 24 位精度,或大约 7 个十进制数字。

数字 18000000 可以用这种格式精确表示,但 18000001 不能,因此加 1 会导致低端的额外位被四舍五入或截断,从而得到值 18000000。所以你得到一个无限循环。

关于c - 理解 c 中的 float 有问题。为什么它会进入无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57854489/

相关文章:

variables - 使用 ColdFusion 访问文本字段循环中的数据

mysql - 使用 MySQL 从字符串返回 float

c - 使用wordexp时保留引号

C - 字符串给我错误

c - 来自不兼容指针类型 C 的许多赋值

c - c 中的动态内存分配,释放在使用 malloc() 之前分配的部分内存

ruby - 如何在 Ruby 中正确使用 for 循环?

perl - 如何在 Perl 中平方一个数字?

c - 对 printf 输出感到困惑

sql-server - 为什么在 SQL Server 中从 float 到 varchar 的转换要四舍五入?