c26451:算式溢出:使用4字节值上的运算符*,然后将结果转换到8字节值。在调用运算符*之前将值强制转换为宽类型可避免溢出

以前用VS2015写的c++代码,警告提示并没在代码区显眼的提示(可能是我个人没进行显示设置),虽然这类warning不会影响程序运行,但确实存在溢出的风险,代码体庞大的情况下,可能会出现意外的结果。
最近换了vs2019,代码区提示比较显眼,也就更改了下个人的代码。

这种运算符操作后,产生溢出风险的问题,无非是我们没有注意到定义某个变量时,该类型所占类型值以及一些默认操作符的默认参数占用字节,比如sin()函数,它的参数默认是8字节也就是double,如果传入 float a=2.3 , float b=1.1, sin(a+b);则会引起该警告,因为程序会认为,两个float进行相加,传给一个更大宽度的类型,可能会存在溢出。

float a=2.3float b=1.1;
sin(a+b);
sin(double(a+b));

修改方法就是---->
直接将 float a b改为double类型,或者在sin的参数列表中进行强转。

另外,我的程序中也存在诸如 : 1-m_Scale这样的表达式, m_Scale为int,取值 非0即1,但该表达式基本出现在某个目标函数的计算过程中,且目标值类型为浮点型。此时也会出现C26451的警告,但对我个人程序而言,我晓得 这个计算是不会出现警告提示的风险的,so 我不做强转也没啥问题,忽略警告也一样、

				double P1 = fabs(this->m_DataSet[Pre_Pos1].X_Axle - this->m_DataSet[Sol[CriticalRobot][tPos1]].X_Axle)*((1 - this->m_Scale)*Area_aSmall + this->m_Scale*Area_aLarge) + fabs(this->m_DataSet[Pre_Pos1].Y_Axle - this->m_DataSet[Sol[CriticalRobot][tPos1]].Y_Axle)*((1 - this->m_Scale)*Area_bSmall + this->m_Scale*Area_bLarge) + fabs(this->m_DataSet[Back_Pos1].X_Axle - this->m_DataSet[Sol[CriticalRobot][tPos1]].X_Axle)*((1 - double(this->m_Scale) *Area_aSmall + this->m_Scale*Area_aLarge) + fabs(this->m_DataSet[Back_Pos1].Y_Axle - this->m_DataSet[Sol[CriticalRobot][tPos1]].Y_Axle)*((1 - this->m_Scale)*Area_bSmall + this->m_Scale*Area_bLarge);


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值