我在简单的 C 循环中找不到我的错误,printf 不起作用

I can't found my mistake in my simple C-loop,the printf doesnt work

下面是我的代码,当我尝试编译它时,printf 不起作用,你怎么看?为什么?

#include <stdio.h>
int main(){
    float i;
    for(i=0.0f; i < 1.0f; i+=0.05f){
        if(i == 0.5f)
            printf("Die Hälfte ist erreicht\n");
    }
    return 0;
}

Floating-point算术旨在逼近real-number算术。源代码中的 0.05f 从该十进制数字转换为近似它的二进制格式。此外,每次执行 i += 0.05f 时,real-number 总和会四舍五入以适应 float 格式。导致的舍入误差可能会复合或取消,使 i 的当前值远离或接近如果使用 real-number 算术时的值。

要使用 floating-point 值的算术序列进行迭代,您可以对计数器使用整数值,然后根据需要缩放计数器:

for (float iteration = 0; iteration < 20; iteration += 1)
{
    float i = iteration / 20;
    if (i == 0.5f)
        printf("Die Hälfte ist erreicht\n");
}

但是,任何比这更复杂的代码都可能涉及其他微妙之处,因此有必要了解 floating-point 算术以便正确使用它。

浮点数基于二进制数。可能无法准确表示十进制数的值,只能表示非常接近的值。

这意味着您应该避免比较 ==!= 浮点数。

一种选择是将您的程序转换为使用整数计数。

#include <stdio.h>
int main(){
    float f;
    for(int i=0; i < 100; i+=5){
        if(i == 50)
            printf("Die Hälfte ist erreicht\n");
        f = (float)i / 100f;
    }
    return 0;
}

另一种选择是比较浮点数与小数的区别

#include <stdio.h>
int main(){
    float i;
    for(i=0.0f; i < 1.0f; i+=0.05f){
        float diff = i - 0.5f;
        if(diff < 0) diff = (-diff);
        if(diff < 0.01)
            printf("Die Hälfte ist erreicht\n");
    }
    return 0;
}