C++ 泰勒展开式问题
来源:百度知道 编辑:UC知道 时间:2024/05/15 08:15:27
请教一个问题
double sineExpn(double x, double e)
{
int param;
double subSum = 0, tempNum1, tempNum2;
x = x / 180.0 * PI;
for (param = 1; abs(tempNum1 - tempNum2) >= e; param ++) {
tempNum1 = pow(x, 2 * param - 1) / factorialProc(2 * param - 1);
tempNum2 = pow(x, 2 * param + 1) / factorialProc(2 * param + 1);
subSum += pow(-1, param - 1) * tempNum1;
}
return subSum;
}
这个是解泰勒展开正弦的函数 阶乘的函数不用管 肯定是对的
我把循环条件里 abs(tempNum1 - tempNum2) >= e 改成 比如 param <= 7或者任意就能正常用 但要求是用最后连续的两项的绝对值差小于一个变量e 结果出来就是0了。。
请问 问题出在哪里 谢谢了
明天试下吧 谢了
double sineExpn(double x, double e)
{
int param;
double subSum = 0, tempNum1, tempNum2;
x = x / 180.0 * PI;
for (param = 1; abs(tempNum1 - tempNum2) >= e; param ++) {
tempNum1 = pow(x, 2 * param - 1) / factorialProc(2 * param - 1);
tempNum2 = pow(x, 2 * param + 1) / factorialProc(2 * param + 1);
subSum += pow(-1, param - 1) * tempNum1;
}
return subSum;
}
这个是解泰勒展开正弦的函数 阶乘的函数不用管 肯定是对的
我把循环条件里 abs(tempNum1 - tempNum2) >= e 改成 比如 param <= 7或者任意就能正常用 但要求是用最后连续的两项的绝对值差小于一个变量e 结果出来就是0了。。
请问 问题出在哪里 谢谢了
明天试下吧 谢了
这是没有初始化tempNum1和tempNum2的结果,所以编译器会自己给它们定义两个初始值,而这两个初始值都有可能是0。所以第一次循环的时候条件判断就是错误的,立刻退出了。你可以把tempNum1定义为1,tempNum2定义为0,这样能保证第一次循环的正常运行,后面的就一切正常了。