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);


  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是Python实现给定算式的计算的函数: ```python def calculate_expression(expression): # 将表达式中的空格去掉 expression = expression.replace(' ', '') # 定义一个栈来存储数字和运算符 stack = [] # 定义一个变量来存储当前数字 num = 0 # 定义一个变量来存储当前运算符 operator = '+' # 遍历表达式中的每个字符 for i in range(len(expression)): # 如果当前字符是数字,将其加入num中 if expression[i].isdigit(): num = num * 10 + int(expression[i]) # 如果当前字符是左括号,将当前数字和运算符入栈,并将num和operator重置为0和+ if expression[i] == '(': stack.append(num) stack.append(operator) num = 0 operator = '+' # 如果当前字符是右括号,先计算当前数字,再将其与栈顶的运算符一起出栈进行计算 if expression[i] == ')': if operator == '+': stack[-1] += num elif operator == '-': stack[-1] -= num num = stack.pop() operator = stack.pop() # 如果当前字符是运算符,先计算当前数字,再将其与栈顶的数字一起出栈进行计算 if expression[i] in ['+', '-']: if operator == '+': stack[-1] += num elif operator == '-': stack[-1] -= num num = 0 operator = expression[i] # 将最后一个数字加入栈中 if operator == '+': stack.append(num) elif operator == '-': stack.append(-num) # 对栈中的数字进行求和 return sum(stack) ``` 使用该函数,可以计算出给定算式的结果。例如: ```python expression = '1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))' result = calculate_expression(expression) print(result) # 输出:2772.0 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值