你能安全地检查无限的标志吗?

Ant*_*nio 3 c++ floating-point

在过去,我们一直在使用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

我可以使用其中一种方法安全地检查无限的符号吗?
C/C++中是否有标准符号函数(signum,sgn)?

注意:

  • 如果启用了fastmath,则独立
  • 以便携的方式

笔记2:

  • C++ 11适用

Fyt*_*tch 6

对于仅检查无限值的符号(如线程标题中所述),此代码应该足够:

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();
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果您可以访问C++ 11就绪编译器,那么标准库还提供了一个函数,std::signbit在头文件中调用<cmath>.它适用于每种基本浮点类型和各种值(也适用于无限甚至NaN),因此应该是更通用的解决方案.