打印

PICC C 编译器的浮点算法有问题

[复制链接]
2367|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hwrhys|  楼主 | 2012-6-12 17:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PICC C 编译器的浮点算法有问题今天,发现一个问题,2个32位的浮点数做减法,
Vobj1 = Vobj1 - Vos;

        Vobj1 = 458637BDH,

        Vos = B7F4D399H,


打断点观察, 减完之后,Vobj1的内容没有变化,


        PICC C编译器是9.83版,


       请同行指教是什么原因 ????? 表示感谢。
沙发
Ryanhsiung| | 2012-6-12 18:10 | 只看该作者
看汇编。
  PS: 8位单片机 你丫的跑32位运算,32位我就不说了,还搞浮点数运算

使用特权

评论回复
板凳
兰天白云| | 2012-6-13 08:11 | 只看该作者
不做优化试试,如果编译器觉得这句多余,优化时会把它咔嚓掉

使用特权

评论回复
地板
tdh03z| | 2012-6-13 19:31 | 只看该作者
哈哈,当年用PIC16F877做浮点运算,还是利用汇编实现的,当然是利用微芯提供的代码,但还是将代码通读了一遍,当时对那个3字节浮点数可是好好看了下哦,一般的精度要求,3字节浮点数足够满足要求了。

看什么应用了,有的场合对运行时间不敏感,当然8位单片机尽量不要用浮点数运算,太费了

使用特权

评论回复
5
tdh03z| | 2012-6-13 19:32 | 只看该作者
忘说了,楼主可能是想测试下吧,像3楼说的,编译器认为你的代码没有任何用处,给你优化掉了。

使用特权

评论回复
6
yewuyi| | 2012-6-14 09:39 | 只看该作者
在MPLAB中浮点格式是需要设置默认字长是24还是32的吧?

使用特权

评论回复
7
manaibi| | 2022-5-27 14:30 | 只看该作者
本帖最后由 manaibi 于 2022-5-27 14:33 编辑

PICC C 编译器的浮点算法有问题,我也是,如adsum1=adresult.AD_DATA*50.0/1023;得到的结果为0。如果改为adsum1=adresult.AD_DATA*50/1023;就可得到结果,但是精度不够。
还要注意数据类型的范围,防止数据溢出,得到的结果不正确。
PICC C 编译器的浮点算法有问题,编程就比较麻烦,我是这样编写的:
adsum1=adresult.AD_DATA;
adsum=(adsum1*48/100)+adsum1*8/1000+adsum1*7/10000+adsum1*5/10/10000+adsum1*8/100/10000;
保留两位小数点。
if(adresult.AD_DATA!=0)adsum+=1;//加1校准
我用的是MPLAB-IDE9.83版本的。



使用特权

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

本版积分规则

5

主题

50

帖子

0

粉丝