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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
t_n_y_09
記事: 8
登録日時: 8年前

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

#1

投稿記事 by t_n_y_09 » 8年前

大学の課題が解けません。
デバッグはできるのですが数字が合いません。
どこが違うか教えてください。

問題
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です

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 8年前

  • 各繰り返しにおいて、kaiに1からkまでの整数全てを掛けるのではなく、kだけを掛ける
  • kaiの型をintからdoubleにする
という変更を加えた所、x=5の時の計算結果が合いました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#3

投稿記事 by みけCAT » 8年前

複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

“C言語何でも質問掲示板” へ戻る