![](/img/trans.png)
[英]Why does adding 1 to numeric_limits<float>::min() return 1?
[英]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.