无穷大值∞的问题

无穷大值∞的问题

在算法题中,经常用到∞作为值,而C/C++是没有无穷大值的,之前是模仿网上一些代码,将INF设为0x7fffffff,这是32-bit int 的最大值214748367

1
2
3
4
5
6
>>> print(0x7fffffff)
2147483647
>>> pow(2, 32)
4294967296
>>> pow(2, 32)/2
2147483648.0

不过这就带来一个问题,这个INF值加一个数后,会造成溢出变成负数,不能满足“无穷大加一个有穷的数依然是无穷大”这个条件

这个时候可以采用0x3f3f3f3f,同样是10^9级别的数,而且0x3f3f3f3f+0x3f3f3f3f=2122219134,这非常大但却没有超过32-bit int的表示范围,所以0x3f3f3f3f还满足“无穷大加无穷大还是无穷大”

这个数最好的地方还是在于它的每个字节都是0x3f,可以用

1
memset(a, 0x3f, sizeof(a));

快速将数组全部设为无穷大

P.S. Python中无穷大可用float(‘inf’)表示

作者

Khan

发布于

2018-05-14

更新于

2023-12-26

许可协议

评论

关注我的B站主页