小数点以下五桁一致の判定
ある実数の定数があり、変数をfor文により変化させて、小数点以下五桁が一致したらbreakしたいのですが、判定がうまくできません。
自分が作ったプログラムは、定数をk,変数をjと置くと
sa=fabs(k-j);
if(sa<1/1000000)break;
としました。
一応出るのですが、ループの回数が、最低限にならないです。いい方法を教えてください。
回答(2件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
No.2ベストアンサー10pt
1/1000000の部分は0になると思います。1.0/1000000としたらどうでしょうか?
この回答への補足
ありがとうございます。
すみません。書き込むときのミスです。
1/1000000.0 としました。
No.1ベストアンサー20pt
(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 が存在するかを判定していく考え方です。
頭からずーっと走査して行くよりはそこそこ早くなると思います。
この回答へのお礼
ありがとうございます。
こんなやり方もあるんですね。素晴らしいです!!
参考にさせていただきます。
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示











