Я пишу программу для расчета «серии Тейлора» и получаю «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;
}
В accumulation += (pow(input, i))/factorial(i);
вы делите на 0.
В факториальной функции вы пропускаете регистр 0, факториал 0 равен 1.
РЕДАКТИРОВАТЬ: Факториал 1 также не 0, вы должны взглянуть на эту факториальную функцию, прежде чем идти вперед.
Ваша факторная функция немного странная. Попробуй это:
long factorial( long input ) {
long output = 1;
for( long i = 2; i <= input; ++ i ) {
output *= i;
}
return output;
}
Двойное значение inf
это специальное значение, чтобы избежать потери информации о переполнении промежуточного вычисления при выполнении последующей математической операции. Когда цепочка операций производит inf
он будет «прилипать» вместо того, чтобы выдавать правильное число с неправильным значением.
Общий способ получить inf
делить на ноль в среде, где это не исключение с плавающей запятой. Так x = 1.0 / 0.0 ... (any operations here)
будет inf
из-за начального inf
, Вы должны найти расчет проблемы и устранить ее, прежде чем сможете увидеть остальную часть вашего результата.