我正在编写一个程序来计算'泰勒系列'并且我得到'inf'作为我的输出。我没有完成程序,一切都工作不正常,但我希望能够看到我的输出。有没有办法缩短输出或使其可见?谢谢你的帮助。
#include <iostream>
#include <math.h>
using namespace std;
long double taylorSeries(long double input, int degree);
long int factorial(int input);
long double derivative(long double input);
int main(int argc, const char * argv[])
{
long double taylorInput = cos(0);
cout << taylorSeries(taylorInput, 3) << endl;
return 0;
}
// taylor series function
long double taylorSeries(long double input, int degree){
long double i = 0;
long double accumulation = 0;
while (i < degree) {
derivative(input);
accumulation += (pow(input, i))/factorial(i);
i++;
}
return accumulation;
}
// function to calculate factorial
long int factorial(int input){
long int factorial = 0;
if (input == 1) {
factorial = 0;
}
while (input > 0) {
if (factorial == 0) {
factorial = input * (input - 1);
input -= 2;
}
else if (input > 0) {
factorial *= input;
input--;
}
}
return factorial;
}
long double derivative(long double input){
long double derivativeResult = 0;
derivativeResult = (((input + .001) - (input)) / .001);
return derivativeResult;
}
答案 0 :(得分:3)
在accumulation += (pow(input, i))/factorial(i);
中,您除以0。
在阶乘函数上,缺少0的情况,因子0为1。
编辑:1的因子也不是0,你应该先看看那个因子函数。
答案 1 :(得分:2)
你的阶乘功能有点棘手。试试这个:
long factorial( long input ) {
long output = 1;
for( long i = 2; i <= input; ++ i ) {
output *= i;
}
return output;
}
答案 2 :(得分:1)
double值inf
是一个特殊值,用于避免在执行后续数学运算时丢失有关溢出中间计算的信息。一旦操作链产生inf
,它将“坚持”而不是产生一个不正确的有效数字。
获取inf
的常用方法是在不是浮点异常的环境中除以零。因为最初x = 1.0 / 0.0 ... (any operations here)
,inf
将为inf
。您必须先找到问题计算并消除它,然后才能看到结果的其余部分。