回答編集履歴

3

7 を 8 に修正

2021/03/20 15:14

投稿

kazuma-s
kazuma-s

スコア8224

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.999724 から 3 を引くので負のままです。
35
+ fx は 2.999824 から 3 を引くので負のままです。
36
36
 
37
37
  i が 733 になったとき、x は 1.733 になり、pow(x, 2) は、3.003289になります。
38
38
 

2

` の追加

2021/03/20 15:14

投稿

kazuma-s
kazuma-s

スコア8224

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

二つ目の質問に回答

2021/03/20 15:13

投稿

kazuma-s
kazuma-s

スコア8224

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 もこれ以上大きくなりません。