在编写一些代码以确保用户输入有效时,我遇到了std::numeric_limits<T>::min();
的问题,其中T是浮点类型,即double / float等。
使用-std::numeric_limits<double>::max();
可以让我获得真正的最小值,但您希望std::numeric_limits<double>::min();
返回该值。
为什么std::numeric_limits<double>::min();
没有返回这些类型的最小可能值,而是强迫我们使用std::numeric_limits::lowest
或-std::numeric_limits<double>::max();
?
答案 0 :(得分:1)
是的,使用-max()
会得到最低价值。
在C ++ 11中,还有std::numeric_limits::lowest
与实数和整数一致。
http://en.cppreference.com/w/cpp/types/numeric_limits/lowest
另见How to workaround the inconsistent definition of numeric_limits<T>::min()?
答案 1 :(得分:0)
为什么会这样?
这是因为std::numeric_limits<>::min()
返回定义为FLT_MIN
,DBL_MIN
或INT_MIN
的实现。在这方面,这种方法的行为是一致的。但std::numeric_limits<double>::min()
:DBL_MIN
的返回值与INT_MIN
的含义略有不同。这是double
可以表示的最小值。可能有大于0的值,但double不能代表它。
为什么在这个实例中使用min()不会做同样的事情?
这背后的基本原理是您可以查询<limits>
此值以检查浮点运算特有的这种可能的下溢。
您可以使用
std::numeric_limits<double>::lowest()
查询最低负值。