こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

小数点以下五桁一致の判定

ある実数の定数があり、変数をfor文により変化させて、小数点以下五桁が一致したらbreakしたいのですが、判定がうまくできません。
自分が作ったプログラムは、定数をk,変数をjと置くと
sa=fabs(k-j);
if(sa<1/1000000)break;
としました。
一応出るのですが、ループの回数が、最低限にならないです。いい方法を教えてください。

投稿日時 - 2003-11-04 15:51:53

QNo.696840

すぐに回答ほしいです

質問者が選んだベストアンサー

(1) とり得る値の最小、最大値をそれぞれ x0 x1 としてあらかじめ決めます。
(2) fabs(x0 - k) と fabs(x1 - k) を比較します。
  このとき、どちらかの値が 10の-5乗未満であれば、求める値はそのときのx0 または x1 になります。
(3) fabs(x0 - k) < fabs(x1 - k) の場合、 x1 = (x0 + x1) / 2.0 として、(2) の比較を行います。
  fabs(x0 - k) > fabs(x1 - k) の場合、 x0 = (x0 + x1) / 2.0 として、(2) の比較を行います。
  fabs(x0 - k) == fabs(x1 - k) の場合、求める値は (x0 + x1) / 2.0 です。
 
区間を2つに区切って、どちらの区間にk が存在するかを判定していく考え方です。
頭からずーっと走査して行くよりはそこそこ早くなると思います。

投稿日時 - 2003-11-04 18:52:30

お礼

ありがとうございます。
こんなやり方もあるんですね。素晴らしいです!!
参考にさせていただきます。

投稿日時 - 2003-11-06 17:44:23

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

1/1000000の部分は0になると思います。1.0/1000000としたらどうでしょうか?

投稿日時 - 2003-11-05 01:25:21

補足

ありがとうございます。
すみません。書き込むときのミスです。
1/1000000.0 としました。

投稿日時 - 2003-11-06 17:25:17

あなたにオススメの質問