【发布时间】:2014-04-03 02:08:42
【问题描述】:
这是我到目前为止的代码,有点乱,因为我仍在试图弄清楚如何设置它,但我不知道如何获得输出。该代码应该采用指数的泰勒级数多项式,并检查获得近似值所需的迭代量。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/*Prototype for functions used*/
double factorial (int);
int main()
{
double input = 0;
double exp_val;
double delta = 1;
int f =0;
int n = 0;
double taylor;
int total;
printf("Plese enter the exponent to check for convergence:\n");
scanf("%lf", &input);
exp_val = exp(input);
printf(" # Iter e^X Sum Diff\n");
printf("---- ------ ------- ----- --------");
while(delta > 0.00001)
{
f = factorial(n);
taylor = ((pow(input,n))/ f);
delta = (exp_val - taylor);
printf("%d %f %f %f/n", (n+1), exp_val, taylor, delta);
n++;
}
system("pause");
}
double factorial (int n)
{
int r = 0;
int sum = 1;
int total = 0;
if (n == 0)
return total =1;
else
{
for(r; r<n; r++)
{
sum = sum * r;
total = sum + 1;
}
return total;
}
}
【问题讨论】:
-
大概你追求的价值只是
n? -
另外,您计算泰勒和的算法非常非常令人反感。你为什么一次又一次地做这些工作?再懒一点!保留运行术语,并考虑一个术语与前一个术语有何不同。
-
当你知道
n-1的阶乘时如何计算n的阶乘(只需乘以n!当你有x^(n-1)时如何计算x^n的值- 多个x!然后保持数字可管理,以免溢出。它们就像公共汽车,喜欢在一起 -
你的
factorial函数很奇怪...sum最初设置为1,但前提是n != 0,它会在第一个乘以0循环,并在其余时间保持为0;这意味着变量total将始终具有相同的值0 + 1 = 1,如果不是初始值0。长话短说,该函数的返回值将始终为1.0。
标签: c factorial taylor-series