寻找阿姆斯特朗数,仅无法输出407(语言-c语言)

问题遇到的现象和发生背景

寻找阿姆斯特朗数,n=3时程序无法输出407(DEVC++上不行,但homework提交平台可以出现)

用代码块功能插入代码,请勿粘贴截图
#include <stdio.h>  
#include <math.h>  
int main()   
{   int i=1, f, q=0;  
    double n6, n5, n4, n3, n2, n1, n, x;  
//寻找阿姆斯特朗数
    scanf("%lf", &n);  
    x=pow(10,n-1);  
    for (f=x; f<10*x; f++)  
    {   n6=f%10;  
        n5=f/10%10;  
        n4=f/100%10;  
        n3=f/1000%10;  
        n2=f/10000%10;  
        n1=f/100000%10;  
        if (f == pow(n1,n) + pow(n2,n) + pow(n3,n) + pow(n4,n) + pow(n5,n) + pow(n6,n))  
        {   printf("%d\n", f);  
            q=1;  
        }  
    }  
    if (q==0) printf("No output.\n");       
    return 0;  
}  

运行结果及报错内容

调试f=407的情况,并输出pow(n1,n)到pow(n6,n)的结果均为正确,
407本身也应该是满足条件的,但调试时407无法通过if语句,最终结果无法出现407(DEVC++上不行,但homework提交平台可以出现)

我的解答思路和尝试过的方法

1.单独尝试pow(0,3)发现结果为0,好像确实不严谨但并没有出错
2.改用以下程序,能够输出407

#include <stdio.h>
#include <math.h>
int main() 
{    int i=1, f, q=0;
    double n6, n5, n4, n3, n2, n1, n, x, y;
    scanf("%lf", &n);
    x=pow(10,n-1);
    for (f=x; f<10*x; f++, y=0)
    {    n6=f%10;
        n5=f/10%10;
        n4=f/100%10;
        n3=f/1000%10;
        n2=f/10000%10;
        n1=f/100000%10;    
        
        if (n1>0)  y+=pow(n1,n);
        if (n2>0)  y+=pow(n2,n);
        if (n3>0)  y+=pow(n3,n);
        if (n4>0)  y+=pow(n4,n);
        if (n5>0)  y+=pow(n5,n);
        if (n6>0)  y+=pow(n6,n);

        if (f==y)
        {    printf("%d\n", f);
            q=1;
        }
    }
    if (q==0) printf("No output.\n");     
    return 0;
}
        

我想要达到的结果

请问为什么会出现这样的问题呢?有点好奇原理
谢谢解答~

可能跟pow函数的返回值是浮点数有关。浮点数精度误差导致不能用==直接判断相等