![](/img/trans.png)
[英]Apple Clang and numeric_limits<unsigned __int128>::max() is 0?
[英]Why is numeric_limits<int>::max() > numeric_limits<int>::infinity()?
我正在閱讀在C ++中將int設置為Infinity 。 我知道當一個人需要真正的無窮大時,應該使用numeric_limits<float>::infinity()
; 我猜其背后的基本原理是,通常整數類型沒有指定用於表示特殊狀態的值,如NaN , Inf等,如IEEE 754浮點數(再次C ++不強制要求 - 使用的int
和float
留給實現) ; 但是對於給定類型而言, max > infinity
仍然是誤導性的。 我試圖理解標准中這個調用背后的基本原理。 如果有一個類型的infinity
沒有意義,那么不應該禁止它而不是要檢查其有效性的標志嗎?
功能numeric_limits<T>::infinity()
有意義的那些T
為其numeric_limits<T>::has_infinity
返回true
。
如果T=int
,則返回false
。 因此,這種比較沒有意義,因為numeric_limits<int>::infinity()
不會返回任何有意義的值來進行比較。
如果您閱讀此參考文獻,您將看到一個表格,顯示整數類型的無窮大為零。 那是因為根據定義,C ++中的整數類型不能是無限的。
相反,假設標准確實保留了一些值來表示inifity,而numeric_limits<int>::infinity() > numeric_limits<int>::max()
。 這意味着int
某個值大於max()
,也就是說, int
某個可表示值大於int
的最大可表示值。
顯然,無論標准指定哪種方式,都會違反一些自然的理解。 無論是inifinity() <= max()
,還是存在x使得int(x) > max()
。 標准必須選擇違反哪種自然規則。
我相信他們明智地選擇了。
numeric_limits<int>::infinity()
返回正無窮大的表示(如果可用)。
如果是整數,則不存在正無窮大:
cout << "int has infinity: " << numeric_limits<int>::has_infinity << endl;
版畫
int has infinity: false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.