关于无穷大量的选择
? ? 在解題時候,通常有遇到設(shè)置為無窮大的情況。這時候通常用0x7fffffff來設(shè)置,他是計算機32位整數(shù)最大數(shù),相當(dāng)于INT_MAX.但是在很多時候這樣設(shè)置并不會是最佳的,還可能導(dǎo)致bug,這是由于我們有的時候希望無窮大+無窮大=無窮大,比如在prim算法或者Dijstra算法中對邊的松弛操作,這個時候INT_MAX隨便加上一個數(shù)就會溢出,從而導(dǎo)致結(jié)果錯誤。
? ? 事實上另外一個數(shù)字0x3f3f3f3f的十進制是1061109567,這與0x7fffffff是同一個數(shù)量級的。我們用0x3f3f3f來代替0x7fffffff可以滿足無窮大加無窮大依然是無窮大的條件,這樣可以避免災(zāi)難性的錯誤。另外0x3f3f3f還可以使用memset函數(shù)批量賦值,例如要將數(shù)組dis[]設(shè)置為無窮大: ? ? ? ? ? ? ?
memset(dis,0x3f,sizeof(dis));如果數(shù)組dis是long long 型,則上面語句將dis設(shè)置為4557430888798830399,若dis為int型?,則上面語句將dis設(shè)置為1061109567無論在long long還是int,兩個無窮的和都不會爆。上面的0x3f是一個字節(jié)0x3f3f3f3f一共有四個這樣的字節(jié)。一般情況下,0x3f3f3f3f是一個設(shè)置無窮的不錯選擇。? ? ? ? ? ? ?
轉(zhuǎn)載于:https://www.cnblogs.com/td15980891505/p/5431898.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
- 上一篇: iOS 翻译-UIWebView的基本简
- 下一篇: Win7x64_chromeX86_相关