2015-01-08 34 views
2

我有以下一段代码,不想分开up,它被声明为float,down,它被声明为int。我曾尝试将down铸造成浮标,但这也不起作用。 我得到的输出是inf的10倍。int分隔浮动和存储为浮动 - 除零除

int main(void) { 
    float x = 0.1, y = 0.0; 

    for (int n = 0; n < 10; n++) { 
     float up = exp(x, n); 
     int down = fac(n); 

     y = up/down; 

     printf("%f\n", y); 

     x += 0.1; 
    } 

    return 0; 
} 

任何人都可以帮我找到这段代码中的(巨大的)错误吗? exp(x,n)fac(n)都将正确的值类型返回到updown

这是两个功能expfac

float exp(float x, int n) { 
    float power = 1; 

    for (int i = 0; i < n; i++) { 
     power *= x; 
    } 
    return power; 
} 

int fac(int n) { 
    int fac = 1; 
    for (int i = 0; i <= n; i++) { 
     fac *= i; 
    } 
    return fac; 
} 
+0

请包括这两个功能!也尝试将函数的返回值转换为int和float(例如'float up =(float)exp(x,n); int down =(int)fac(n);')这是否有诀窍? – Rizier123

+0

'fac()'做些什么? – nav

+0

而不要命名你自己的函数'exp' ... –

回答

3

您除以0:

int fac = 1; 
for (int i = 0; i <= n; i++) { 
    fac *= i; /* This will be 0 since you start from i=0. */ 
} 
return fac; 

你可能只是想从1开始代替。

+0

谢谢。多么糟糕的错误,没有考虑零除。现在我确实得到了正确的输出。让我们回到工作中牢记这一点。 – Tim