2013-05-03 36 views
2

我正在閱讀關於C++中正負無窮大的內容。積分類型在C++中的正負無窮大

我讀了積分類型沒有無限值,即。 std::numeric_limits<int>::infinity();不會工作,但std::numeric_limits<int>::max();將工作,並將代表可以由整型表示的最大可能值。

所以整數類型的std::numeric_limits<int>::max();可以作爲它的positive infinite limit

或整數類型只有max valueinfinity value是不正確的?

+0

據我所知,所有的數據類型是有限的。最大值是有限值,例如32位。 – fonZ 2013-05-03 09:51:53

+0

你能解釋一下你想要對包含無限界限的整數做什麼操作嗎? – 2013-05-03 09:52:35

+0

您可以將任何含義與任何值相關聯。你甚至可以把'567'視爲NaN。但是,對於std中的任何一個命題都沒有(本地)支持。問題是:你想完成什麼? – 2013-05-03 09:54:52

回答

2

浮點數有一個特殊的位模式來指示「該值是無窮大」,當某些操作的結果被定義爲無限時使用該模式。

整數值有一組位數,所有位都用來表示一個數值。沒有「特殊位模式」,它只是位位置的總和。

編輯:在我的AMD64架構程序員手冊的印刷版的第315頁,它說

無限。 Infinity是正數或負數+ ∞和 -∞,其中整數位是1,偏置指數是最大值,分數是0. infintes是 可以用浮​​點格式表示的最大數,負的無窮大比任何有限數量少 ,並且正無窮大大於任何有限數量(即仿射意義)。

和無限的結果是產生當非零,非無限數目 除以0或無窮大通過相乘,或當無限遠被添加到 無窮大或爲0算術infinites是準確的。例如,將 的任何浮點數加到+ ∞給出的結果是+ ∞ 算術比較在無限上正常工作。僅當使用無窮大作爲源操作數構成 無效操作時纔會出現異常 。

(任何輸入錯誤都是我的)

+0

你認爲'NaN'「不是數字」嗎?我不認爲這是一個正確的解釋,因爲'-1/0'與'1/0'一樣會返回'NaN'。 – 2013-05-03 10:30:49

+2

不,NaN不同。看到我上面添加的報價(評論太大)。 (NaN是類似的編碼,但分數不爲零,實際上有NaN的多個變體)。 – 2013-05-03 10:49:11

+0

+1爲所有細節 – 2013-05-03 10:50:24

3

整數總是有限的。

最接近你可以得到你要找的是通過設置一個整數的最大值,這對於一個有符號整數只有大約20億東西。

std :: numeric_limits有一個has_infinity成員,您可以使用它來檢查您想要的類型是否具有無限表示形式,這通常只在浮點數(例如float和double)上進行。