Как сократить мой вывод? В настоящее время получает «инф»

Я пишу программу для расчета «серии Тейлора» и получаю «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

Решение

В accumulation += (pow(input, i))/factorial(i); вы делите на 0.

В факториальной функции вы пропускаете регистр 0, факториал 0 равен 1.

РЕДАКТИРОВАТЬ: Факториал 1 также не 0, вы должны взглянуть на эту факториальную функцию, прежде чем идти вперед.

3

Другие решения

Ваша факторная функция немного странная. Попробуй это:

long factorial( long input ) {
long output = 1;
for( long i = 2; i <= input; ++ i ) {
output *= i;
}
return output;
}
2

Двойное значение inf это специальное значение, чтобы избежать потери информации о переполнении промежуточного вычисления при выполнении последующей математической операции. Когда цепочка операций производит inf он будет «прилипать» вместо того, чтобы выдавать правильное число с неправильным значением.

Общий способ получить inf делить на ноль в среде, где это не исключение с плавающей запятой. Так x = 1.0 / 0.0 ... (any operations here) будет inf из-за начального inf, Вы должны найти расчет проблемы и устранить ее, прежде чем сможете увидеть остальную часть вашего результата.

1
По вопросам рекламы [email protected]