打印
[AVR单片机]

问个ICC AVR中C语言类型转化的问题——为啥我的计算结果不对

[复制链接]
2077|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
alloy518|  楼主 | 2009-1-18 09:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有这么一个函数,输入是2个int型数,计算后返回一个int类型数据,函数如下

int vot_to_ris(int SenVot,int VerfVot)
{
 float temp1;
 int temp;                                          
 temp1 = (390 * SenVot) / ((2 * VerfVot) - SenVot);
 temp = (int)(temp1);
 return temp; 
}

其中SenVot和VerfVot的取值都是0-0x1FF;然后函数返回的int类型值通过/255和%255的方式分别取出高低位利用putchar送出

目前的问题是:当SenVot较大的时候得到的数据值不对,小的时候就没啥问题,我个人估计是在计算过程中类型转换的问题,但是修改了好几次问题依旧,大家能否帮我看看应该怎么处理,谢谢

相关帖子

沙发
mxh0506| | 2009-1-21 16:17 | 只看该作者

应该是这一句的问题

temp1 = (390 * SenVot) / ((2 * VerfVot) - SenVot);
C语言默认按整型进行运算,最终结果才转换成浮点型.
这会造成中间计算过程的舍入误差

使用特权

评论回复
板凳
mxh0506| | 2009-1-21 16:23 | 只看该作者

主要的问题应该是数据溢出

整型的表达范围只有-32768 ~ +32767
这样,你的SenVot不能大于32767/390,也不能小于-32768/390=-84

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

24

帖子

0

粉丝