理解的问题浮于c ..为什么会陷入无限循环?

brf*_*rfh 2 c floating-point loops

我试图更新我的C知识,并且遇到了float错误。

例如,此循环将是无限的:

#include <stdio.h>

int main(){

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

为什么这样工作?

dbu*_*ush 5

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

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