關於無窮大量的選擇

2022-05-12 22:42:19 字數 606 閱讀 4215

在解題時候,通常有遇到設定為無窮大的情況。這時候通常用0x7fffffff來設定,他是計算機32位整數最大數,相當於int_max.但是在很多時候這樣設定並不會是最佳的,還可能導致bug,這是由於我們有的時候希望無窮大+無窮大=無窮大,比如在prim演算法或者dijstra演算法中對邊的鬆弛操作,這個時候int_max隨便加上乙個數就會溢位,從而導致結果錯誤。

事實上另外乙個數字0x3f3f3f3f的十進位制是1061109567,這與0x7fffffff是同乙個數量級的。我們用0x3f3f3f來代替0x7fffffff可以滿足無窮大加無窮大依然是無窮大的條件,這樣可以避免災難性的錯誤。另外0x3f3f3f還可以使用memset函式批量賦值,例如要將陣列dis設定為無窮大:              

memset(dis,0x3f,sizeof(dis));

如果陣列dis是long long 型,則上面語句將dis設定為4557430888798830399,若dis為int型 ,則上面語句將dis設定為1061109567無論在long long還是int,兩個無窮的和都不會爆。上面的0x3f是乙個位元組0x3f3f3f3f一共有四個這樣的位元組。一般情況下,0x3f3f3f3f是乙個設定無窮

的不錯選擇。

關於無窮大量的設定

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

程式設計中的無窮大

在網上看別人 的時候,經常會看到他們把inf設為0x7fffffff,因為這是32 bit int的最大值。如果這個無窮大只用於一般的比較 比如求最小值時min變數的初值 那麼0x7fffffff確實是乙個完美的選擇。if d u w u v 如果u,v之間沒有邊,那麼w u v inf,如果我們的...

希爾伯特關於無窮大的故事

設想有一家旅店,內設有無限個房間,而所有房間都已客滿。這是來了位新客,想訂個房間。旅店主說 對不起,所有的房間都住滿了 現設想另一家旅店,內設有無限多個房間,所有房間也都客滿。這時來了位新客,想訂個房間。沒有問題 旅店主說。接著,他就把1號房間的旅客移至2號房間,2號房間的旅客移至3號房間,3號房間...