ページ 11

e^2xをマクローリン展開する

Posted: 2017年5月17日(水) 11:43
by t_n_y_09
大学の課題が解けません。
デバッグはできるのですが数字が合いません。
どこが違うか教えてください。

問題
e^2xをマクローリン展開し、有効数字10桁まで求めよ。


この時の有効数字は、展開したk-1の項までの和と、k項までの和が10桁一致するまでループするということです。
k項までの和-k項までの和は、k項であると思ったので、k項×10^10が0以下になるまでループしました。

コード:

#define _CRT_SECURE_NO_WARNINGS 1
#define _USE_MATH_DEFINES
#include<stdio.h>
#include <math.h>

int main(void) {
	double x;
	int kai = 1;
	int k;
	int i;//階乗に使う
	double bb;//2*x
	double bb2;//分母
	double kou;//k項
	double ans;//2項からk項までの和
	double sa;//最後の項

	printf("e^2xのxをいくつにしますか?\n");//e^2xの入力
	scanf("%lf", &x);
	bb = 2 * x;
	ans = 1.0;
	for (k = 1;; k += 1)//kを増やす
	{
		bb2 = pow(bb, k);//2x^k
		for (i = 1; i <= k; ++i) {//階乗
			kai = kai * i;
		};

		kou = bb2 / kai;//k項
		sa = kou * 10000000000;

		if (sa <= 0)
			break;//差が0以下になったらこのループを終わりにする。

		ans = ans + kou;
	}
printf("計算結果は%fです\n", ans);//出力⑨

	return 0;
}
[実行結果]
e^2のxを何にしますか?
5(入力)
計算結果は182.000927です

Re: e^2xをマクローリン展開する

Posted: 2017年5月17日(水) 22:19
by みけCAT
  • 各繰り返しにおいて、kaiに1からkまでの整数全てを掛けるのではなく、kだけを掛ける
  • kaiの型をintからdoubleにする
という変更を加えた所、x=5の時の計算結果が合いました。

Re: e^2xをマクローリン展開する

Posted: 2017年5月18日(木) 00:31
by みけCAT