dポイントプレゼントキャンペーン実施中!

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

A 回答 (2件)

(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 が存在するかを判定していく考え方です。
頭からずーっと走査して行くよりはそこそこ早くなると思います。
    • good
    • 1
この回答へのお礼

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

お礼日時:2003/11/06 17:44

1/1000000の部分は0になると思います。

1.0/1000000としたらどうでしょうか?

この回答への補足

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

補足日時:2003/11/06 17:25
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!