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