簡體   English   中英

為什么是numeric_limits <int> :: max()&gt; numeric_limits <int> ::無窮()?

[英]Why is numeric_limits<int>::max() > numeric_limits<int>::infinity()?

我正在閱讀在C ++中將int設置為Infinity 我知道當一個人需要真正的無窮大時,應該使用numeric_limits<float>::infinity() ; 我猜其背后的基本原理是,通常整數類型沒有指定用於表示特殊狀態的值,如NaNInf等,如IEEE 754浮點數(再次C ++不強制要求 - 使用的intfloat留給實現) ; 但是對於給定類型而言, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM