您的位置:首页 > 其它

关于无穷大量的选择

2016-04-25 18:03 218 查看
在解题时候,通常有遇到设置为无穷大的情况。这时候通常用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是一个设置无穷的不错选择。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: