关于无穷大的设定


一般来说,在不明确的情况下,都取0x7fffffff作为无穷大,因为这的确是32-bit int的最大值。但在某些情况下,这可能不是一个很好的选择。

很多时候,我们并不是单纯拿无穷大来比大小,而是会进行一定运算后再比较,例如最短路径算法中常用到的松弛操作,两个无穷大相加就会变成负数(溢出了)。

这时候,我们可以选用一些更为精巧的数字来代替,也就是0x3f3f3f3f。

0x3f3f3f3f的10进制表示为1061109567,这个数已达到10^9,足以表示无穷大,而且2*0x3f3f3f3f=2122219134,满足无穷大+无穷大仍为无穷大,而不会变成负数。

还有一点是,0x3f3f3f3f的每个字节都是0x3f,所以可以方便初始化,比如memset(a,0x3f,sizeof(a)),而0x7fffffff就需要循环操作了。


我前面的程序好像少打了两个f。。

posted @ 2017-01-28 06:36  Eventide  阅读(299)  评论(0编辑  收藏  举报