当前位置: 动力学知识库 > 问答 > 编程问答 >

c++ - Why does numeric_limits::min return a negative value for int but positive values for float/double?

问题描述:

Why does numeric_limits::min return a negative value for int, but positive values for e.g. float and double?

#include<iostream>

#include<limits>

using namespace std;

int main() {

cout << "int: " << numeric_limits<int>::min() << " "

<< "float: " << numeric_limits<float>::min() << " "

<< "double: " << numeric_limits<double>::min() << "\n";

return 0;

}

Output:

int: -2147483648 float: 1.17549e-38 double: 2.22507e-308

From cppreference:

Returns the minimum finite value representable by the numeric type T.

For floating-point types with denormalization, min returns the minimum

positive normalized value. Note that this behavior may be unexpected,

especially when compared to the behavior of min for integral types. To

find the value that has no values less than it, use

numeric_limits::lowest.

min is only meaningful for bounded types and

for unbounded unsigned types, that is, types that represent an

infinite set of negative values have no meaningful minimum.

网友答案:

By definition, for floating types, min returns the smallest positive value the type can encode, not the lowest.

If you want the lowest value, use numeric_limits::lowest instead.

Documentation: http://en.cppreference.com/w/cpp/types/numeric_limits/min

As for why it is this way, I can only speculate that the Standard committee needed to have a way to represent all forms of extreme values for all different native types. In the case of integral types, there's only two types of extreme: max positive and max negative. For floats there is another: smallest possible.

If you think the semantics are a bit muddled, I agree. The semantics of the related #defines in the C standard are muddled in much the same way.

网友答案:

It's unfortunate, but behind similar names completely different meaning lies. It was kinda carried over from C, where DBL_MIN and INT_MIN has the very same "problem".

As not much can be done, just remember what means what.

分享给朋友:
您可能感兴趣的文章:
随机阅读: