关于无穷大量的选择
在解題時(shí)候,通常有遇到設(shè)置為無窮大的情況。這時(shí)候通常用0x7fffffff來設(shè)置,他是計(jì)算機(jī)32位整數(shù)最大數(shù),相當(dāng)于INT_MAX.但是在很多時(shí)候這樣設(shè)置并不會(huì)是最佳的,還可能導(dǎo)致bug,這是由于我們有的時(shí)候希望無窮大+無窮大=無窮大,比如在prim算法或者Dijstra算法中對(duì)邊的松弛操作,這個(gè)時(shí)候INT_MAX隨便加上一個(gè)數(shù)就會(huì)溢出,從而導(dǎo)致結(jié)果錯(cuò)誤。
事實(shí)上另外一個(gè)數(shù)字0x3f3f3f3f的十進(jìn)制是1061109567,這與0x7fffffff是同一個(gè)數(shù)量級(jí)的。我們用0x3f3f3f來代替0x7fffffff可以滿足無窮大加無窮大依然是無窮大的條件,這樣可以避免災(zāi)難性的錯(cuò)誤。另外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,兩個(gè)無窮的和都不會(huì)爆。上面的0x3f是一個(gè)字節(jié)0x3f3f3f3f一共有四個(gè)這樣的字節(jié)。一般情況下,0x3f3f3f3f是一個(gè)設(shè)置無窮的不錯(cuò)選擇。
總結(jié)
- 上一篇: 为什么民航单位免费给查胸部CT+为什么天
- 下一篇: @RequestMapping和@Get