我试图找到' 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);
}
答案 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
是必不可少的。
最好从最小值开始进行累加。