#3
by かずま » 6年前
taylor_exp が変です。
z が未初期化である以外に、
(-1)/((k-1)+k) が整数の割り算で常に 0 になっています。
zk *= -t / ((k-1) * k); と書いたほうが良いのでは?
i が 5 だとすると、k = 2, 3, 4, 5 だから、
z = 1 - t/(1*2) + t
2/(1*2*2*3) - t
3/(1*2*2*3*3*4) + t
4/(1*2*2*3*3*4*4*5)
やっぱり変です。
e
t のテイラー展開なら次のようになるのではありませんか?
コード:
double taylor_exp(int i, double t)
{
double z = 1, zk = 1;
for (int k = 1; k < i; k++)
zk *= t / k, z += zk;
return z;
}
taylor_exp が変です。
z が未初期化である以外に、
(-1)/((k-1)+k) が整数の割り算で常に 0 になっています。
zk *= -t / ((k-1) * k); と書いたほうが良いのでは?
i が 5 だとすると、k = 2, 3, 4, 5 だから、
z = 1 - t/(1*2) + t[sup]2[/sup]/(1*2*2*3) - t[sup]3[/sup]/(1*2*2*3*3*4) + t[sup]4[/sup]/(1*2*2*3*3*4*4*5)
やっぱり変です。
e[sup]t[/sup] のテイラー展開なら次のようになるのではありませんか?
[code]
double taylor_exp(int i, double t)
{
double z = 1, zk = 1;
for (int k = 1; k < i; k++)
zk *= t / k, z += zk;
return z;
}
[/code]