exp関数には、次のようなセリフがあります。 exp(x) = (x^0)/0! + (x^1)/1! + (x^2)/2! + (x^3)/3! + ···
。そして私はxの異なる値について計算し、電卓で結果をチェックしようとしていますが、例えば大きな値の場合、結果が増えなくなり、ほぼ真の値になってしまいます。私は485165184.00
を得て、実際の値は485165195.4
です。Cでexp(x)をどのように記述できますか?
このコードは、宿題の割り当てであるため、forサイクルまたは再帰関数で行う必要があります。通常TAD精度以上の7桁の数字を表すことができる
#include <stdio.h>
#define N 13
#define xi 3
double fun7(int n, int m){
int i;
double res=1, aux=0;
for(i=1, aux=1; i<(n+1); i++){
res += aux;
aux *= m;
aux /= i;
}
return res-1;
}
int main() {
int a, b, pot, x[xi];
float R[N][xi];
x[0] = 5;
x[1] = 10;
x[2] = 20;
for(b=0; b<xi; b++){
for (a=0, pot=1; a<N; a++){
R[a][b] = fun7(pot, x[b]);
pot *= 2;
}
}
for(b=0; b<xi; b++){
for (a=0, pot=1; a<N; a++){
printf("%d\t%f\n", pot, R[a][b]);
pot *= 2;
}
printf("\n");
}
return 0;
}
長いダブルとしてキャストしてもらえますか? – Tikhon
'float' - >' double' – BLUEPIXY
階乗を使わずにe(x)を計算する方法があります... wikipedia、googleをチェックしてください.... –