(slopeDegrees = 90型longdouble)
cout<<slopeDegrees<<endl;
if(slopeDegrees==90)cout<<"0"<<endl;
このコードは機能しません...コンソールは90のみを出力します(90である必要があります\ n 0)なぜですか?VS2010を使用しています
(slopeDegrees = 90型longdouble)
cout<<slopeDegrees<<endl;
if(slopeDegrees==90)cout<<"0"<<endl;
このコードは機能しません...コンソールは90のみを出力します(90である必要があります\ n 0)なぜですか?VS2010を使用しています
90 をフロートと比較しようとしています。浮動小数点は常に正確に 90.0000 になるため、89.9998 または 90.0001 になる可能性があります。別の int または float 値と直接比較する場合、比較は真ではありません。
これはそのように行うべきではありませんが、次のようにします。
if (Math.Abs(slopeDegrees - 90.0) < 0.001)
0.001 は、自分で定義できる精度です。
double やその他の浮動小数点型との等価性の比較には、危険が伴います。double の 90 は近似値であり、正確に整数の 90 ではありません。
正確な不平等と比較するのではなく、しきい値内にあることと比較することをお勧めします。何かのようなもの:
if (slopeDegrees > 89.9 && slopeDegrees < 90.1)
{
cout << "0" << endl;
}
特定の重要な値の正確な表現が必要な場合は、これらの値を表現する固定小数点の方法を調べる必要があります。
double
正確に等しいかどうかを比較したくないからです。代わりに、範囲内でテストします。元:
const double THRESHOLD = 0.005;
double slopeDegrees = 90;
cout<<slopeDegrees<<endl;
if((slopeDegrees <= (90 + THRESHOLD)) && (slopeDegrees >= (90 - THRESHOLD)))
{
cout<<"0"<<endl;
}