我的代码有什么问题:当我尝试以 C 为单位计算欧拉数 e 时,值输出错误?



我试图使用一个循环来近似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;
}
nfact = 1;
for (int count = 1; count < n; count++)     
{
    nfact = n * count;
}

不会计算CCD_ 1
nfact每次迭代都会得到一个全新的值。你的意思肯定是

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

这不是计算数字阶乘的方法:

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;
}

这是我的通过使用以下公式来估计数学常数e的值:e=1+1/1!+1/2!+1/3!+。。。。

#include <stdio.h>
int main(void) {
    int n = 0;          /* loop counter for accuracy */
    int accuracy = 10;  /* current n factorial */
    int fact = 1;       /* degree of accuracy */
    double e = 0;       /* current estimated value of e */

/*循环直到准确度*/

    while (n <= accuracy) {
        if (n == 0) {
            fact *= 1;
        } else {
            fact *= n;
        }
        e += 1.0 / fact;
        ++n;
    }
    printf("e is %f", e);
    return 0;
}

相关内容

  • 没有找到相关文章