So, to catch NaN and infinity, maybe:Or to be more thorough:Code:bool iFinite(double d) { return (d != numeric_limits<double>::quiet_NaN() && d != numeric_limits<double>::infinity()); }edit: Apparently this doesn't find indeterminate numbers (0.0/0.0).Code:#include <limits> template <typename T> inline bool isFinite(T val) { if (std::numeric_limits<T>::has_quiet_NaN && val == std::numeric_limits<T>::quiet_NaN()) return false; if (std::numeric_limits<T>::has_infinity && val == std::numeric_limits<T>::infinity()) return false; return true; }