我的代码出了什么问题:当我试图用C计算欧拉数e时,输出错误?

时间:2014-11-01 21:16:07

标签: c eulers-number

我试图使用一个循环来逼近C中的欧拉数,当两个连续的e值之间的差值小于0.0000001时,该循环终止。我得到的值是2.99 ..我尝试设置它,以便每次迭代时,e将与其自身的先前值(在e1中保持)进行比较,如果差值大于0.0000001,则将添加另一个项1 /( N!)。问题是什么?我是编程新手,所以任何建议/评论都会受到赞赏。

#include <stdio.h>
int main()
{
    float e1 = 0, e2 = 1;
    int n = 1, nfact; 

    while ((e2 - e1) > 0.0000001)         
    {
        e1 = e2;   
        nfact = 1;
        for (int count = 1; count < n; count++)     
        {
            nfact = n * count;
        }
        n = n + 1;
        e2 = e1 + (1.0 / nfact);
    }   

    printf("Approximated value of e = %f", e2);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

这不是你如何计算数字的阶乘:

for (int count = 1; count < n; count++)     
{
   nfact = n * count;
}

请注意,您始终在每次迭代时将nfact分配给n*count的值,从而删除nfact的先前值。这段代码相当于:

nfact = n*(n-1);

因为它是count的最后一个值。

我想你想要这个:

nfact = n;
for (int count = n-1; count > 0; count--)     
{
    nfact = nfact * count;
}

答案 1 :(得分:1)

nfact = 1;
for (int count = 1; count < n; count++)     
{
    nfact = n * count;
}

不会计算n! nfact每次迭代都会获得一个全新的值。 当然你的意思是

nfact = 1;
for (int count = 2; count <= n; count++)     
{
    nfact *= count;
}