关于编程中无穷大量的设定参数

关于编程中无穷大量的设定参数

今天复习最短路、随手写了一个代码、习惯性的定义了#define INF=0x7fffffff  ;结果程序错误、甚是不解、后仔细研究才明白——弗洛伊德算法的松弛操作:if (d[u]+w[u][v]<d[v]) d[v]=d[u]+w[u][v];显然会数组越界。。。。。sad。

 

最好的办法是 #define inf 0x3f3f3f3f、0x3f3f3f3f的十进制是1061109567,也就是10^9级别的(和0x7fffffff一个数量级),而一般场合下的数据都是小于10^9的,所以它可以作为无穷大使用而不致出现数据大于无穷大的情形。由于一般的数据都不会大于10^9,所以当我们把无穷大加上一个数据时,它并不会溢出、满足了“无穷大加一个有穷的数依然是无穷大”;

要把一段内存全部置为无穷大,我们只需要memset(a,0x3f,sizeof(a))。

所以在通常的场合下,0x3f3f3f3f真的是一个非常棒的选择。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值