![](/img/trans.png)
[英]Error C2589 on std::numeric_limits<double>::min()
[英]Issue with std::numeric_limits<T>::min() with float/double values
在編寫一些代碼以確保用戶輸入有效時,我遇到了std::numeric_limits<T>::min();
其中T是浮點類型,即double / float等。
使用-std::numeric_limits<double>::max();
允許我獲得實際的最小值,但是您會期望std::numeric_limits<double>::min();
退還。
為什么std::numeric_limits<double>::min();
不返回這些類型的最小可能值,而是強制我們使用std::numeric_limits::lowest
或-std::numeric_limits<double>::max();
?
是的,使用-max()
將給出最小值。
在C ++ 11中,還存在與實數和整數一致的std::numeric_limits::lowest
。 http://en.cppreference.com/w/cpp/types/numeric_limits/lowest
為什么是這樣?
這是因為std::numeric_limits<>::min()
返回定義為FLT_MIN
, DBL_MIN
或INT_MIN
。 在這方面,該方法的行為是一致的。 但是std::numeric_limits<double>::min()
的返回值: DBL_MIN
含義與INT_MIN
含義略有不同。 這是double
可以代表的最小值。 可能值大於0,但double不能代表它。
為什么在這種情況下使用min()不會做同樣的事情?
其基本原理是,您可以查詢<limits>
以獲得該值,以檢查特定於浮點運算的可能的下溢。
您可以使用
std::numeric_limits<double>::lowest()
查詢最低的負值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.