带有float / double值的std :: numeric_limits <t> :: min()问题</t>

时间:2014-03-27 22:57:40

标签: c++ c++11

在编写一些代码以确保用户输入有效时,我遇到了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();

2 个答案:

答案 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_MINDBL_MININT_MIN的实现。在这方面,这种方法的行为是一致的。但std::numeric_limits<double>::min()DBL_MIN的返回值与INT_MIN的含义略有不同。这是double可以表示的最小值。可能有大于0的值,但double不能代表它。

  

为什么在这个实例中使用min()不会做同样的事情?

这背后的基本原理是您可以查询<limits>此值以检查浮点运算特有的这种可能的下溢。


您可以使用

std::numeric_limits<double>::lowest()

查询最低负值。

相关问题