回答編集履歴
3
7 を 8 に修正
test
CHANGED
@@ -32,7 +32,7 @@
|
|
32
32
|
|
33
33
|
i が 732 になったとき、x は 1.732 になり、pow(x, 2) は、2.999824 になります。
|
34
34
|
|
35
|
-
fx は 2.999
|
35
|
+
fx は 2.999824 から 3 を引くので負のままです。
|
36
36
|
|
37
37
|
i が 733 になったとき、x は 1.733 になり、pow(x, 2) は、3.003289になります。
|
38
38
|
|
2
` の追加
test
CHANGED
@@ -38,6 +38,6 @@
|
|
38
38
|
|
39
39
|
fx は 3.003289 から 3 を引くので正になります。
|
40
40
|
|
41
|
-
`if(fx>=0) return x; でループを抜け、関数root の実行を終了します。
|
41
|
+
`if(fx>=0) return x;` でループを抜け、関数root の実行を終了します。
|
42
42
|
|
43
43
|
i はこれ以上大きくなりませんし、x もこれ以上大きくなりません。
|
1
二つ目の質問に回答
test
CHANGED
@@ -1 +1,43 @@
|
|
1
1
|
fx が初期化されていないのに、fx <= 0 で参照しています。
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
**追記**
|
6
|
+
|
7
|
+
> 一つ目のコードではうまくいかず、解が1.000になってしまいました。
|
8
|
+
|
9
|
+
何が間違っているのかわかりません。
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
fx が初期化されていなくて、たまたま正の値が入っていたんでしょう。
|
14
|
+
|
15
|
+
`while(fx<=0){` でループ条件が成立せず、ループの中に入りません。
|
16
|
+
|
17
|
+
a = 1、i = 0、d = 0.001 なので、x = a+i*d = 1.000 になります。
|
18
|
+
|
19
|
+
`double fx = 0, x;` に変更すると、正しく動くでしょう。
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
> 二つ目のコードではうまくいき、近似値として1.733が得られたのですが、なぜうまくいったのかわかりません。i<Nまで続けるという条件文ではxの値はどんどん大きくなってしまいfx>=0という条件文のif文では返されるxの値はどんどん大きくなってしまうのではないですか。なぜ正しい解が得られるのでしょうか。
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
i が 0、1、2、3、... と増えていくと、
|
28
|
+
|
29
|
+
x は、1.000、1.001、1.002、1.003、... と増えていきます。
|
30
|
+
|
31
|
+
pow(x, 2) は、1.000、1.002001、1.004004、1.006009、... と増えていきます。
|
32
|
+
|
33
|
+
i が 732 になったとき、x は 1.732 になり、pow(x, 2) は、2.999824 になります。
|
34
|
+
|
35
|
+
fx は 2.999724 から 3 を引くので負のままです。
|
36
|
+
|
37
|
+
i が 733 になったとき、x は 1.733 になり、pow(x, 2) は、3.003289になります。
|
38
|
+
|
39
|
+
fx は 3.003289 から 3 を引くので正になります。
|
40
|
+
|
41
|
+
`if(fx>=0) return x; でループを抜け、関数root の実行を終了します。
|
42
|
+
|
43
|
+
i はこれ以上大きくなりませんし、x もこれ以上大きくなりません。
|