私は持っconst float M = 0.000001;
ていfloat input;
ます。平等チェックはしたくない。しかし、直接チェックには副作用があることを私は知っていますM != input
。だから、副作用なしに2つのフロート値を比較するにはどうすればよいですか?
質問する
736 次
2 に答える
3
const double epsilon = 1e-12;
if(fabs(input - M) < epsilon) //input == M
{
//...
}
if(fabs(input - M) >= epsilon) // input != M
{
//...
}
イプシロンの値が小さいほど、比較の精度が高くなります。したがって、2つの値が等しくないと見なされるのに、2つの値が等しくないことがわかる可能性が高くなります。イプシロンの値が大きいほど、実際には等しくないようにしたかったのに、結果が等しいと表示される可能性が高くなります。イプシロンの値は、目前のタスクの詳細に従って選択する必要があります。
于 2012-11-06T11:14:55.267 に答える
0
フロートを比較するときは、「等しい」ではなく「近い」かどうかを比較する必要があります。必要に応じて「クローズ」を定義する方法は複数あります。ただし、典型的なアプローチは次のようなものです。
namespace FloatCmp {
const float Eps = 1e-6f;
bool eq(float a, float b, float eps = Eps) {
return fabs(a - b) < eps;
}
//etc. for neq, lt, gt, ...
}
次に、フロートを比較するFloatCmp::eq()
代わりに使用します。==
于 2012-11-06T11:17:31.397 に答える