过去我们一直在使用 Visual Studio 的 _fpclass 来了解无穷大是正数还是负数: http://msdn.microsoft.com/en-us/library/aa246882%28v=vs.60%29.aspx
传递给 std::fpclassify,正负无限之间不再有区别: http://en.cppreference.com/w/cpp/numeric/math/fpclassify
我可以使用此处的其中一种方法安全地检查无穷大的符号吗?
Is there a standard sign function (signum, sgn) in C/C++?
注意:
- 独立地如果fastmath已启用
- 以便携的方式
注2:
- C++11 适用
最佳答案
仅检查无限值的符号(如线程标题中所述),此代码就足够了:
template<typename T>
typename std::enable_if<std::numeric_limits<T>::has_infinity, bool>::type Signed(T const& Value)
{
return Value == -std::numeric_limits<T>::infinity();
}
编辑:如果您可以访问 C++11 就绪编译器,标准库还提供一个函数,称为 std::signbit
在标题中 <cmath>
.它适用于每种基本浮点类型和每种值(因此也适用于无限甚至 NaN),因此应该是一个更通用的解决方案。
关于c++ - 你能安全地检查无穷大的符号吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25909494/