新しく質問する

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

役に立った:1件
  • 質問者:beatman
  • 投稿日時:2003/11/04 15:51
  • 困り度:すぐに回答が欲しいです
  • 友達に紹介
  • ブログに書く
  • 教えて!gooお気に入り

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

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:1件)
  • 参考になった:0件

No.2ベストアンサー10pt

  • 回答者:gimmick
  • 回答日時:2003/11/05 01:25

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

通報する

この回答への補足

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

  • 参考になった:0件

No.1ベストアンサー20pt

  • 回答者:tailkuppa
  • 回答日時:2003/11/04 18:52

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

通報する

この回答へのお礼

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

  
このQ&Aは役に立ちましたか?(役に立った:1件)

このページのトップへ

Facebook公式ページ

公式Twitter