【发布时间】:2014-08-28 14:37:17
【问题描述】:
为了好玩,我尝试使用级数展开来评估从 0 到 1 的高斯积分。出于这个原因,我写了一个阶乘函数,它在 20 以内都能很好地工作!(我检查过)然后我写了这个:
int main(){
int n;
long double result=0;
for(n=0; n<=5; n++){
if(n%2==0){
result+=(((long double) 1/(long double)(factorial(n)*(2*n+1))));
} else {
result-=(((long double) 1/(long double)(factorial(n)*(2*n+1))));
}
}
printf("The Gaussian integral from 0 to 1 is %Lf\n", result);
}
这给了我一个奇怪的负数,显然甚至不接近。我怀疑问题出在演员表上,但我不知道是什么问题。有什么想法吗?这不是我尝试的第一件事。我尝试转换表达式中的任何内容并将显式转换放在开头,但它不起作用。
【问题讨论】:
-
factorial(0)的结果是什么? -
为我工作:ideone.com/VLgnoS
-
是1,我在写函数的时候就解决了这个问题。
-
你用的是什么编译器?如果是 MinGW,它不能正确处理
long double。 -
供将来参考:最好在您的帖子中包含“奇怪的负数”中的意外输出和您的预期输出。这两件事有助于解决问题。