Функция пользователя

написать программу расчета выбранной функции Y(x), или S(x) (желательно и |Y(x)–S(x)|), вид которой в свою очередь передается в качестве параметра в функцию вывода (Out_Rez). Функции в прикрепленом файле. вот код который у меня вышел. вроде func2() без проблем посчитать(т.е Y(x)), а вот как посчитать S(x)? у меня при каждом х выдается NAN введите сюда описание изображения введите сюда описание изображения Очень прошу помочь.

#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream>
using namespace std;


typedef double (*TFun)(double,double);
double fun1(double,double);

double fun2(double,double);

void Out_Rez (TFun, double, double, double,double );

int main()

{

    double a, b, h,n;
    puts("Input a, b,h ,n"); scanf("%lf%lf%lf%lf", &a, &b, &h, &n);
    puts("\n\t Function - S(x) = (cos(kpi/4))/k!*x^k)"); Out_Rez (fun1,a, b,h,n);
    puts("\n\t Function - Y(x) = e^(xcos(pi/4)*(cos(xsin(pi/4))))"); Out_Rez (fun2,a,b,h,n);
    puts("\n Press any key... ");

    getch();
       return 0;
}


double fun1( double x,double n){
         double s=1;
         double pi = 3.1415926;
         int fact = 1;
        for (int k = 0; k <= n; k++) {
          fact*=k;
          s+=(cos(k*pi/4)*pow(x, k))/fact;
        }



    return  s;



}

double fun2(double x,double n) {
    double pi = 3.1415926;
    return exp(x*cos(pi/4))*cos(x*sin(pi/4));
}

void Out_Rez (TFun f, double xn, double xk, double h, double n) {

    for(double x=xn; x<=xk; x+=h){
       printf(" x = %5.2lf, y = %8.4lf\n",x, f(x,n));
    }



}


Ответы (1 шт):

Автор решения: Harry

Да вот как посчитать это ваше S(x,n):

double cs[4] = { 1, 1/sqrt(2), 0, -1/sqrt(2) };
double S = 1, t = 1;
for(int k = 1; k <= n; ++k) S += cs[k%4]*(1 - 2*((k/4)%2))*(t *= x/k);

Ну, а вся программа — тут: https://ideone.com/uOQaTe

Да, от С++ (тем более С++11) у вас тут нет ничего, кроме неиспользуемого #include<iostream>, так что я метку вопроса изменил на C.

→ Ссылка