指数関数について
Posted: 2019年7月30日(火) 16:29
指数関数e^tをテイラー展開で各点で計算し、expと比較するというプログラムについて、実行結果がnanになってしまいます。どこを改善すればよいでしょうか。
#include <stdio.h>
#include <math.h>
double taylor_exp( int, double );
int main(void){
int k_max = 15;
int sample = 8;
int n,m;
n = k_max + 2;
m = sample + 1;
double data[n][m];
double data_exp[m];
int i,j;
double pi=3.141592;
double td=((2.0*pi)/(double)sample);
for(j=0;j<m;j++)
data[0][j] = td*j;
for(j=0;j<m;j++)
data_exp[j] = exp(data[0][j]);
for(i=1;i<k_max+1;i++)
for(j=0;j<m;j++){
data[i][j]=taylor_exp( i, data[0][j] );
data[i+1][j]=data[i][j]-data_exp[j];
}
printf(" t = ");
for(j=0;j<m;j++)
printf("%8.4f",data[0][j]);
printf("\n\n");
for(i=1;i<n;i+=2){
printf("%2dth exp = ",i);
for(j=0;j<m;j++)
printf("%8.4f",data[i][j]);
printf("\n");
printf("%2dth err = ",i);
for(j=0;j<m;j++)
printf("%8.4f",data[i+1][j]);
printf("\n\n");
}
return 0;
}
double taylor_exp( int i, double t ){
double z;
double zk;
int k;
zk=1;
z+=zk;
for(k=2;k<i+1;k++){
zk*=(((-1)/((k-1)*k))*t);
z+=zk;
}
return z;
}