发布网友 发布时间:2022-04-20 22:50
共4个回答
热心网友 时间:2023-11-09 13:17
应该是溢出了,两个数最大为255时,乘积最大为65535,结果需要一个16位的无符号整数才能保存,当乘数再大时,保存结果的数需要定义为更大一点的整型,如long
热心网友 时间:2023-11-09 13:17
你的程序有两个问题:
1、你首先要保证20个数字的平方和不超过4字节长
2、关键是LeakArray的定义是怎么样的,如果是INT8U型的数组,那他们的乘积还是INT8U的,其进位会被丢失,此时就需要强制类型转换:例如:x=x+(INT32U)LeakArray[i]*(INT32U)LeakArray[i];
热心网友 时间:2023-11-09 13:17
20个数的平方和,超过INT32U了,先溢出了,再求平均值就已经不对了,需要优法算法
还是直接把改好的给你吧,采不采纳是你的事情
//大于20的部分是先除20的商求和 小于20的部分(余数)先求和了再除以20,最后两部分和起来
//这样在求和时就不会有溢出
INT32U x=0,x1;
INT8U i;
INT16U s,s1=0; //返回结果
for (i=0;i<20;i++)
{
x1 = LeakArray[i]*LeakArray[i]
x += x1/20;
s1+= x1%20;
}
x = x+s1/20;
s = sqrt(x);
热心网友 时间:2023-11-09 13:18
溢出了啊