teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

7 を 8 に修正

2021/03/20 15:14

投稿

kazuma-s
kazuma-s

スコア8222

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.999724 から 3 を引くので負のままです。
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

` の追加

2021/03/20 15:14

投稿

kazuma-s
kazuma-s

スコア8222

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

二つ目の質問に回答

2021/03/20 15:13

投稿

kazuma-s
kazuma-s

スコア8222

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