回答編集履歴

3

追記

2022/01/03 16:02

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -55,3 +55,71 @@
55
55
  C のポインタが、全く理解できていないようです。
56
56
 
57
57
  関数の宣言、関数の定義、関数の呼び出しも理解できていないようです。
58
+
59
+
60
+
61
+ **追記**
62
+
63
+ 再帰ではなく、ループでやるとこんな感じでしょうか?
64
+
65
+ ```C
66
+
67
+ #include <stdio.h> // printf
68
+
69
+ #include <math.h> // fabs, exp
70
+
71
+
72
+
73
+ #define EPS 1e-6
74
+
75
+
76
+
77
+ double simpson(double a, double b, int n, double f(double))
78
+
79
+ {
80
+
81
+ double h = (b - a) / (2 * n);
82
+
83
+ double s = f(a) + f(b);
84
+
85
+ for (int i = 1; i < n; i++)
86
+
87
+ s += 4 * f(a + (2 * i - 1) * h) + 2 * f(a + 2 * i * h);
88
+
89
+ s += 4 * f(a + (2 * n - 1) * h);
90
+
91
+ s *= h / 3;
92
+
93
+ return s;
94
+
95
+ }
96
+
97
+
98
+
99
+ int main(void)
100
+
101
+ {
102
+
103
+ int n = 1;
104
+
105
+ double y0 = simpson(0, 1, n, exp), y;
106
+
107
+ for (n = 2; ; n *= 2) {
108
+
109
+ //printf("n = %d, y0 = %f\n", n, y0); // 途中経過を見る
110
+
111
+ y = simpson(0, 1, n, exp);
112
+
113
+ if (fabs(y - y0) < EPS) break;
114
+
115
+ y0 = y;
116
+
117
+ }
118
+
119
+ printf("n = %d, y = %f\n", n, y);
120
+
121
+ }
122
+
123
+ ```
124
+
125
+ コメントをお願いします。

2

誤字の修正

2022/01/03 16:02

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
 
4
4
 
5
- 39行目の `*g` の `g` は 35行目の `double g` ですから、型は double です。
5
+ 39行目の `*g` の `g` は35行目の `double g` ですから、型は double です。
6
6
 
7
- 単項演算子 `*` ポインタに適用して、嫣然結果がそのポインタの指す
7
+ 単項演算子 `*` ポインタに適用して、演算結果がそのポインタの指すオブジェクト
8
8
 
9
- オブジェクトになるのに、「`g` がポインタではない」というエラーです。
9
+ になるべきなのに、「`g` がポインタではない」というエラーです。
10
10
 
11
11
 
12
12
 

1

説明の追加

2022/01/02 10:03

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -53,3 +53,5 @@
53
53
 
54
54
 
55
55
  C のポインタが、全く理解できていないようです。
56
+
57
+ 関数の宣言、関数の定義、関数の呼び出しも理解できていないようです。