【发布时间】:2013-03-24 21:26:25
【问题描述】:
numeric_limits<T>::min();
numeric_limits<T>::lowest();
两个函数返回的值有什么不同?
【问题讨论】:
-
[给未来的读者]en.cppreference.com/w/cpp/types/numeric_limits 的表格很好地解释了这一点。
标签: c++ c++11 stl standard-library
numeric_limits<T>::min();
numeric_limits<T>::lowest();
两个函数返回的值有什么不同?
【问题讨论】:
标签: c++ c++11 stl standard-library
如果您检查这些函数的参考,例如this one for min 和this one for lowest 可以看到有些值不同。
【讨论】:
对于浮点类型,min 返回该类型中可表示的> 0 的最小有限数(即具有最低绝对值!= 0 的数),而lowest 返回可表示的最小有限数(即小于-infinity的最大绝对值的负数。
【讨论】:
lowest 给出最小的有限可表示值。
C++11 标准第 18.3.2.4 段规定:
static constexpr T min() noexcept;1 最小有限值。
2 对于具有非规范化的浮点类型,返回最小正规范化值。
3 对所有专业都有意义
[...]
static constexpr T lowest() noexcept;6 一个有限值 x,使得在 y
7 对于 is_bounded != false 的所有特化都有意义。
脚注197然后添加相关备注:
lowest()是必要的,因为并非所有浮点表示都有一个最小(最负)值,即 最大(最正)有限值的负数。
【讨论】:
lowest 返回最大正整数的 2s 补码。
min() 和 lowest() 之间没有区别。