繁体   English   中英

为什么numeric_limits :: min为int返回负值但是为float / double返回正值?

[英]Why does numeric_limits::min return a negative value for int but positive values for float/double?

为什么 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;
}

输出:

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

从cppreference:

返回数值类型T表示的最小有限值。

对于具有非规范化的浮点类型,min返回最小正标准化值。 请注意,此行为可能是意外的 ,尤其是与整数类型的min行为进行比较时。 要查找没有小于它的值的值,请使用numeric_limits::lowest

min仅对有界类型和无界无符号类型有意义,也就是说,表示无限负值集的类型没有有意义的最小值。

根据定义,对于浮点类型, min返回类型可以编码的最小正值,而不是最低值

如果您想要最低值,请使用numeric_limits::lowest

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

至于为什么会这样,我只能推测标准委员会需要有一种方法来代表所有不同本地类型的所有形式的极值。 在积分类型的情况下,只有两种类型的极端:最大正数和最大负数。 对于花车还有另一个:最小可能。

如果你认为语义有点混乱,我同意。 C标准中相关#define的语义大致相同。

这是不幸的,但背后相似的名字完全不同的意义所在。 它有点从C继承,其中DBL_MIN和INT_MIN具有完全相同的“问题”。

由于没有多少可以做,只记得什么意味着什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM