2

重複の可能性:
浮動小数点の比較はどのようにすればよいですか?

これはコードのスニペットであり、何が問題なのか理解できません。

ifステートメントは数値を誤って評価し、「else」になります。

double m,k;

m = (y3-y1)/(x3-x1);
k = m*(-x1)+y1;

cout <<"\n\n"<< m <<"  "<< k << "\n";
cout <<"\n\n"<< ((-a)/b) <<"  "<< c/b << "\n";

if(m==((-a)/b) && k==c/b)
 {
  cout << "\nTaisne sakrīt ar kādu no trīsstūra malām!" << endl;
  goto beigas;
 }
  else
   cout << "\n\n WRONG \n\n";

ユーザーが値x1、y1、x3、y3、a、b、cを入力します-すべてdoubleです。

「m」でのみ正常に動作するようです。そして、私が次のことを試みたとき、ifステートメントが同じ値で真であったことは奇妙です:

if(m==((-a)/b) && k<c/b)

問題全体を取得するためのスクリーンショットを次に示します。

http://i49.tinypic.com/307n88l.jpg

ユーザーがすべての値を入力した後、コードが開始されます。

ありがとう、どんな助けでも大歓迎です!

4

1 に答える 1

0

2つの浮動小数点を比較する場合は、次のようなしきい値を使用します。

double m = a/b;

if (abs(m - (a/b)) < 0.0001)
{
    // execute code where m == a/b here
}

したがって、基本的にフロート/ダブル減算を比較し、結果が特定のしきい値よりも小さいことを確認します。

于 2012-10-29T19:07:42.033 に答える