-1

(slopeDegrees = 90型longdouble)

cout<<slopeDegrees<<endl;

if(slopeDegrees==90)cout<<"0"<<endl;

このコードは機能しません...コンソールは90のみを出力します(90である必要があります\ n 0)なぜですか?VS2010を使用しています

4

3 に答える 3

4

90 をフロートと比較しようとしています。浮動小数点は常に正確に 90.0000 になるため、89.9998 または 90.0001 になる可能性があります。別の int または float 値と直接比較する場合、比較は真ではありません。

これはそのように行うべきではありませんが、次のようにします。

if (Math.Abs(slopeDegrees - 90.0) < 0.001)  

0.001 は、自分で定義できる精度です。

于 2012-08-19T14:35:14.283 に答える
3

double やその他の浮動小数点型との等価性の比較には、危険が伴います。double の 90 は近似値であり、正確に整数の 90 ではありません。

正確な不平等と比較するのではなく、しきい値内にあることと比較することをお勧めします。何かのようなもの:

if (slopeDegrees > 89.9 && slopeDegrees < 90.1)
{
    cout << "0" << endl;
}

特定の重要な値の正確な表現が必要な場合は、これらの値を表現する固定小数点の方法を調べる必要があります。

于 2012-08-19T14:34:51.920 に答える
1

double正確に等しいかどうかを比較したくないからです。代わりに、範囲内でテストします。元:

const double THRESHOLD = 0.005;
double slopeDegrees = 90;

cout<<slopeDegrees<<endl;

if((slopeDegrees <= (90 + THRESHOLD)) && (slopeDegrees >= (90 - THRESHOLD)))
{
    cout<<"0"<<endl;
}
于 2012-08-19T14:36:03.860 に答える