ACM中關於無窮常數的設定

2021-07-16 01:30:40 字數 486 閱讀 7914

無窮大

const int inf = 0x3f3f3f3f;

這樣設定的好處是可以通過memset直接對連續的記憶體進行無窮大初始化,如下

memset(blockptr,0x3f,blocksize);

無窮小

const int ninf = -inf -1;

const int ninf = 0xc0c0c0c0;

與無窮大類似,可以使用memset對連續記憶體進行無窮小初始化

memset(blockptr,0xc0,blocksize);

此處inf+inf並不會造成溢位(=2122219134或0x7e7e7e7e),這樣就不會造成inf+inf突變為乙個負數.

x在一定範圍內仍然保證x+inf>=inf

ACM程式設計中無窮大的設定

如果問題中各資料的範圍明確,那麼無窮大的設定不是問題,在不明確的情況下,很多程式設計師都取0x7fffffff作為無窮大,因為這是32 bit int的最大值。如果這個無窮大只用於一般的比較 比如求最小值時min變數的初值 那麼0x7fffffff確實是乙個完美的選擇,但是在更多的情況下,0x7ff...

關於無窮大量的設定

如果問題中各資料的範圍明確,那麼無窮大的設定不是問題,在不明確的情況下,很多程式設計師都取0x7fffffff作為無窮大,因為這是32 bit int的最大值。如果這個無窮大只用於一般的比較 比如求最小值時min變數的初值 那麼0x7fffffff確實是乙個完美的選擇,但是在更多的情況下,0x7ff...

程式設計中無窮大的設定

很多人可能設為0x7fffffff,這個數的確是32 bit int的最大值,符號位為0,其他的都是1 但在很多情況下,0x7fffffff會出現錯誤,比如溢位,這樣兩個無窮大數相加會變成負數,還有如在做dijkstra求最短路時,當做鬆弛操作,判斷if d u w u v 1.為了盡量避免以上的錯...