[求助] 请教各位高手如何在片子里做浮点数除法???

历史的天空   2011-6-19 22:21 楼主
如题,最近做一个东西,需要用到除法运算,但是在IAR编译环境下simulate调试模式下尝试编译了一下,发现比如:如果做3/1024   这样的运算后的结果只能保留除法运算后的整数部分。大家有遇到过相似问题的吗??怎样解决呢??

回复评论 (9)

"/" 本来就是取整运算符,而"%"则是取余运算符,两个结合着用
点赞  2011-6-20 07:21

引用: 原帖由 历史的天空 于 2011-6-19 22:21 发表 如题,最近做一个东西,需要用到除法运算,但是在IAR编译环境下simulate调试模式下尝试编译了一下,发现比如:如果做3/1024 这样的运算后的结果只能保留除法运算后的整数部分。大家有遇到过相似问题的吗??怎样解 ...

 

有些时候,我是把被除数扩大一定倍数来运算的,这样得出的结果也是变成扩大了相应倍数的,比如转成3000/1024,这样就相当于保留了小数点后面3位的精度,不过,要注意被除数的范围,不要溢出了。

点赞  2011-6-20 11:15

引用: 原帖由 历史的天空 于 2011-6-19 22:21 发表 如题,最近做一个东西,需要用到除法运算,但是在IAR编译环境下simulate调试模式下尝试编译了一下,发现比如:如果做3/1024 这样的运算后的结果只能保留除法运算后的整数部分。大家有遇到过相似问题的吗??怎样解 ...

 

另外,如果使用的是IAR for MSP430,定义浮点数double i;,运算时尝试换成

i = 3.0/1024.0;

编译环境会将其做浮点数的除法运算。

如果用3/1024,有些编译器仍认为要做的是整型除法,那么得出的仍旧是0。

点赞  2011-6-20 11:37

回复 4楼 David_Lee 的帖子

其实最直接的方法就是利用C语言当中数据类型的自动转换来实现,我们只要将除数或被除数定义成一个float或double就可以实现小数的除法。。。
只有想不到,没有做不到。
点赞  2011-6-20 23:02
尝试用下IQmath这个库函数,ti上面有下载的.811IQmath库.
点赞  2011-6-22 16:45
刚刚还在【问TI】关于数后边神秘东东
这个帖子回过一个人问数值的后缀,其实异曲同工
如果你使用编译器而非汇编来做浮点运算,那么就要保证编译器能正确识别你的数据类型,识别精度范围,long型和double型是不一样,和int型更是天差地别,所以做常数运算最要小心的就是数值的类型

就拿你这个来说,1/1024,因为前后都为整数,所以编译器默认为int型,就好像编译器默认signed,auto一样。但是你实际上想要的可能是float型,可是编译器不知道啊,所以你要让编译器知道你想要什么,比如强制类型转换,比如数值下标。前面的算法改为如下即可
1/1024f;
这一点在进行运算时很重要,可是偏偏很多C语言的书籍都不去讲它,希望大家能引以为重
点赞  2011-6-23 00:21
还有一点,注意float和double的区别,有些算法里这是致命的。
点赞  2011-6-23 00:34
楼主,这个问题搞定了没,我感觉是if(index == 31)这个条件的问题啊!呵呵!
点赞  2012-9-28 10:30
不好意思,贴子开太多贴错地方了!
点赞  2012-9-28 10:31
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复