编程中无穷大的设定

编程中无穷大的设定

很多人可能设为0x7fffffff,这个数的确是32-bit int的最大值,符号位为0,其他的都是1

但在很多情况下,0x7fffffff会出现错误,比如溢出,这样两个无穷大数相加会变成负数,还有如在做dijkstra求最短路时,当做松弛操作,判断if (d[u]+w[u][v]<d[v]) d[v]=d[u]+w[u][v]时,若u到v没有路劲,w[u][v]=0x7fffffff,这样d[u]+w[u][v]会变成负数,这就产生了错误。

为了尽量避免以上的错误,我们可以改变无穷大的设定,可以将0x3f3f3f3f设为无穷大,0x3f3f3f3f的10进制表示为1061109567,这个数已达到10^9,足以表示无穷大,又0x3f3f3f3f+0x3f3f3f3f=2122219134,满足无穷大+无穷大仍为无穷大

当把无穷大设为0x3f3f3f3f时,在做初始化时也很方便,比如在初始化数组a时,可以使用

Memset(a,0x3f,sizeof(a)),因为0x3f3f3f3f的每个字节都是0x3f,如果使用0x7fffffff,需要循环赋值,耗费更多时间

下面做个简单的小测试

#include<stdio.h>
#include<string.h>
#define MAX1 0x7fffffff
#define MAX2 0x3f3f3f3f
int a[3];
int main()
{
	memset(a,0x3f,sizeof(a));
	printf("%d\n",MAX1);
	printf("%d\n",MAX1*2);
	printf("%d\n",MAX2);
	printf("%d\n",MAX2*2);
	for(int i=0;i<3;i++)
	printf("%d ",a[i]);
	printf("\n");
	return 0;
}



  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
MATLAB是一种强大的数学建模和仿真软件,适用于各种工程领域的应用。要在MATLAB仿真单机无穷大系统,可以使用以下步骤: 1. 定义系统模型:首先,需要根据实际问题定义系统的输入、输出以及系统的动态行为。这可以通过差分方程、微分方程或状态空间表示。 2. 确定仿真平台:选择适当的仿真平台来实现单机无穷大系统。MATLAB提供了多种仿真平台,如Simulink、Simscape等。根据系统的性质和需求,选择适合的平台。 3. 构建仿真模型:在选择的仿真平台上,使用图形界面或编程语言,建立单机无穷大系统的仿真模型。这包括构建输入、输出接口、系统内部元件和连接它们的信号路径等。 4. 设定仿真参数:设置仿真的时间范围、步长和系统的初始条件。根据实际情况,选择合适的仿真参数来获得准确的仿真结果。 5. 运行仿真:将构建好的仿真模型运行起来,在仿真平台上观察系统的响应和性能。可以通过绘制图表、曲线和计算仿真结果来分析系统的行为。 6. 优化和验证:根据仿真结果,对系统进行优化和验证。根据需要,可以尝试优化系统元件参数、输入信号或系统结构,以改进系统的性能。 7. 结果分析:分析仿真结果并进行评估。比较仿真结果与实际系统性能,并根据需要进行进一步的改进和调整。 通过这些步骤,可以在MATLAB进行单机无穷大系统的仿真。仿真结果可以用于系统设计、性能评估和优化,提高工作效率和减少成本。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值