合計 昨日 今日

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

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: t_n_y_09
[URL]
ぴよぴよ(111 ポイント)
Date: 2017年5月17日(水) 11:43
No: 1
(OFFLINE)

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

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

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


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

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#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です

Name: みけCAT
[URL]
伝説なるハッカー(664,603 ポイント)
Date: 2017年5月17日(水) 22:19
No: 2
(OFFLINE)

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

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

Name: みけCAT
[URL]
伝説なるハッカー(664,603 ポイント)
Date: 2017年5月18日(木) 00:31
No: 3
(OFFLINE)

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

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


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[24人]