<cfloat>
ヘッダ中にあるDBL_EPSILON
を使えば誤差も考慮して2つのdouble値の等価比較ができる。
float型ならFLT_EPSILON
を使えばよい。
#include <cmath> #include <cfloat> //double型のaとbを誤差考慮して比較する bool NearlyEqual(double a, double b) { return abs(a - b) < DBL_EPSILON; } int main() { double a,b; if(NearlyEqual(a,b)) { return 0; } return 1; }
追記(11/07) 故あってUE4の数学ライブラリ読んでたら似たような関数があったので、それに習って書き換えてみる。
struct Math { static constexpr bool NearlyEqual(const float a, const float b, const float err = FLT_EPSILON) { return Abs<float>(a - b) <= err; } static constexpr bool NearlyEqual(const double a, const double b, const float err = DBL_EPSILON) { return Abs<double>(a - b) <= err; } template<typename T> static constexpr inline T Abs(const T a) { return (a >= (T)0) ? a : -a; } };