21
Дек
2016

Оптимизация программы. Деление на факториал. Ряд Тейлора

введите сюда описание изображения Есть функция, которая вычисляет значение математической функции путем разложения в ряд Тейлора. Преподаватель из университета сказал, что лучше не делить на факториал, а сделать как то по другому. Как можно оптимизировать данную функцию, что бы убрать факториал из знаменателя?

double function(const double x)
{

    int n=0,i;
    long long int factor;
    double eps=0.0001,F=eps+1.0, Sum=0;
    while(eps <= F)//Если модуль значения функции меньше чем eps, прекращаем суммирование
    {
        for(i=2,factor=1;i<=n;i++)
            factor*=i;
        F=(pow(-1,n) * pow(x,n)) / factor;
        Sum+=F;
        if(F<0)//Узнаем модуль "F", для сравнивания с "eps" ибо значение может быть отрицательным.
            F*=-1;
        n++;
    }
    return Sum;
}

Источник: https://ru.stackoverflow.com/questions/605961/%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B-%D0%94%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BD%D0%B0-%D1%84%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%B8%D0%B0%D0%BB-%D0%A0%D1%8F%D0%B4-%D0%A2%D0%B5%D0%B9%D0%BB%D0%BE%D1%80%D0%B0

Share

Тебе может это понравится...