本帖最后由 shafei 于 2012-3-29 19:50 编辑
我用单片机处理数据遇到一个不大不小的问题,
有一个公式y=0.09*x-45 其中x是unsigned char型,x的取值范围为[500,2500]我有几个问题
一:这里的y定义成什么类型比较好,float型吗?
二:算出y后,我希望对它四舍五入后,返回一个unsigned char型的数据
我的意思是说:算出y后,四舍五入以后,再让y变成unsigned char型
我举一个例子,假如我算出来y为178.3,我想让它四舍五入后变成178,然后返回unsigned char型的178,如果我算出来的是178.8,我想让他四舍五入后变成179,然后返回unsigned char型的179
大家可以帮帮我吗?我用在舵机角度控制上面
刚才有人提醒因为X是从500到2500,所以X不是uchar,应该定义成uint
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
对,我看过
而且18B20里面是用了查表的方法来确定小数的
这个好,用心记住
这里是有问题的,考虑在if判断之前tmp_2是9、tmp_3大于5的情况——显示会出错。
-----------------------------------------------------------------------------------------------------
这里依然有问题——少了个分号。
-----------------------------------------------------------------------------------------------------
首先,这个公式是有四舍五入的,注意:
(9*x-4450)/100 = (9*x-4500+50)/100 = 0.09*x-45+0.5
这个0.5就是用做四舍五入处理的;
其次,从上面的推算过程就可以知道,这个公式的推演过程没有引入额外的误差,整个计算过程只有最后的四舍五入处理引入了一个±0.5的误差,而这个误差是没有办法避免的,如果你要用整数存储最后的计算结果的话。
-----------------------------------------------------------------------------------------------------
同上,-11392 = -11520+128,所以是有四舍五入的,这没有问题;误差在[-1, 0]之间也没有问题(详见我在20楼上传的附件);但这里加入了四舍五入处理后,x取500也没有问题,因为不会出现“负结果”,6楼的原始算法没有处理四舍五入,程序在输入500的时候本该输出0度,却回因为减法结果为负20(实际被处理成65516)而输出255度。
一周热门 更多>