数据类型导致计算溢出的问题

问题:数据类型使用不当和表达式使用不当是的计算溢出,导致数据错误。
看如下表达式:

int  XYZ_BaseVal[3], XYZ_SmoothVal[i];
XYZ_BaseVal[i] =  XYZ_BaseVal[i] * 95 +   XYZ_SmoothVal[i] * 5;
XYZ_BaseVal[i] =   XYZ_BaseVal[i] / 100;
数组元素的取值范围是-2408到2047.

所以, 当 XYZ_BaseVal[i] 的值比较大时,XYZ_BaseVal[i] * 95 表达式得到的是一个负数 ,导致计算结果错误。

做如下修改:

long Temp = 0;
Temp =    XYZ_BaseVal[i] * 95 +   XYZ_SmoothVal[i] * 5;

这样就可以了吗??结果是仍然错误。那么:

Temp =    XYZ_BaseVal[i] * 95;

结果仍然错误。

从这个表达式可以看到一个本质的问题,  XYZ_BaseVal[i] * 95 的计算结果放在哪里的? 从debug中可以看到 XYZ_BaseVal[i] * 95表达式的值为负数,然后再把这个数赋值给 Temp,所以修改后也不对。改为如下:

Temp1 = XYZ_BaseVal[i];
Temp1 *= 95;
Temp2 = XYZ_SmoothVal[i];
Temp2 *= 5;
Temp1 = Temp1 + Temp2;
Temp1 = Temp1 / 100;
XYZ_BaseVal[i] = Temp1;

这才正确。

分享到: 更多
版权申明:

本站保留所有原创文章的版权,本站地址:奔跑的博客[http://www.elecbench.com]

原创文章转载时请注明出处,并添加文章所在页面的链接:http://www.elecbench.com/%e6%95%b0%e6%8d%ae%e7%b1%bb%e5%9e%8b%e5%af%bc%e8%87%b4%e8%ae%a1%e7%ae%97%e6%ba%a2%e5%87%ba%e7%9a%84%e9%97%ae%e9%a2%98/

本站所有 2010年3月4日 以后发表、未标明为“转载”的文章均是本站原创。

发表评论?

2 条评论。

  1. 博主,问下你pjblog转换后附件是怎么处理的,例如我的附件全部是download.asp?id=XXX 的,不知道怎么转换

发表评论


(设置自己的个性头像)

*

申请属于你的免费顶级域名