gnz*_*lbg 31 c++ std numeric-limits
为什么 numeric_limits :: min返回int的负值,但是例如float和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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
int: -2147483648 float: 1.17549e-38 double: 2.22507e-308
Run Code Online (Sandbox Code Playgroud)
从cppreference:
返回数值类型T表示的最小有限值.
对于具有非规范化的浮点类型,min返回最小正标准化值.请注意,此行为可能是意外的,尤其是与整数类型的min行为进行比较时.要查找没有小于它的值的值,请使用
numeric_limits::lowest.min仅对有界类型和无界无符号类型有意义,也就是说,表示无限负值集的类型没有有意义的最小值.
Joh*_*ing 37
根据定义,对于浮动类型,min返回类型可以编码的最小正值,而不是最低值.
如果您想要最低值,请numeric_limits::lowest改用.
文档:http: //en.cppreference.com/w/cpp/types/numeric_limits/min
至于为什么会这样,我只能推测标准委员会需要有一种方法来代表所有不同本土类型的所有形式的极值.在积分类型的情况下,只有两种类型的极端:最大正数和最大负数.对于花车还有另一个:最小可能.
如果你认为语义有点混乱,我同意.#defineC标准中相关s 的语义以大致相同的方式混淆.