找到' e'的近似值。用C语言

时间:2018-06-17 15:32:55

标签: c numerical-methods

我试图找到' e'的近似值。使用C程序。我正进入(状态 无论我输入n的值,e的值都是真的。请让我 在我的代码中找到错误。

#include <stdio.h>

int f;
int k;

int factorial (int f);

int main () { 
    int n,i;

    int e = 1;

    printf("Enter the value of n:");
    scanf("%d",&n);

    for (i = 1; i <= n; i++) {
        e = e + (1/factorial(i));
    }

    printf("The value of e is %d",e);

    return(0);
}

int factorial (int f) {    
    for (k = 1; k <= f; k++) {
       f = f*k;
    }

    return(p);
}

4 个答案:

答案 0 :(得分:3)

如上所述,您必须使用浮点变量。另一个问题是阶乘函数会在12之后溢出!另外,连续重新计算阶乘是浪费处理能力。通过在前一个术语的基础上,这显示了实现泰勒级数的更有效方式。这也避免了计算阶乘的问题。

#include <stdio.h>

int main(void) {
    double e, term;
    int t, n;

    printf("Enter the value of n:");
    if(scanf("%d", &n) != 1) {
        return 1;
    }

    e = 1;
    term = 1;
    for(t = 1; t <= n; t++) {
        term /= t;
        e += term;
    }
    printf("%.15f\n", e);
    return 0;
}

使用程序可以处理的最大n程序输出

Enter the value of n:12
2.718281828286169

而在math.h中它是

2.718281828459045...

哪个不太准确。此示例允许获得更准确的值:

Enter the value of n:20
2.718281828459046

答案 1 :(得分:1)

您有一些错误。您在class SomeMetaClass(type): def __new__(mcls, name, bases, namespace, **kwds): special = None for attr in namespace.values(): special = getattr(attr, '_special_attribute_name', None) if special is not None: break namespace['target_attribute'] = special return super().__new__(mcls, name, bases, namespace, **kwds) 变量中添加浮动值!请阅读以下代码的评论:

int

答案 2 :(得分:1)

RadRating

您的问题是您正在更改<telerikInput:RadRating FontSize="500" > <!--<telerikInput:RadRating.Style> <Style TargetType="telerikInput:RadRating"> <Setter Property="FontSize" Value="500" /> </Style> </telerikInput:RadRating.Style>--> <telerikInput:RadRatingItem /> </telerikInput:RadRating> 的值,除了已经解释过的其他错误。它应该返回double factorial (int f) { double p = 1; for (k = 1; k <= f; k++) { p = p*k; // f = f * k; } return p; // what is p doing here? (in original code) } 和其他一些错误。

答案 3 :(得分:0)

对于准确的float估算,

e = (((((((((1.f / 11 + 1) / 10 + 1) / 9 + 1 ) / 8 + 1) / 7 + 1) / 6 + 1) / 5 + 1) / 4 + 1) / 3 + 1) / 2 + 2

开头的.f是必不可少的。


最好从最小值开始进行累加。