打印

float/double 運算精度丟失如何解決?

[复制链接]
5146|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
endlessss|  楼主 | 2008-8-27 09:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前用的是16BIT MCU,開發環境用KEIL
定義 float a,b,c;
   a = 1811711;
   b = 1.1;
   c = a+ b;
   最后c = 1811712;小數位丟失,
   小數丟失是可以理解的。
但是我將數據類型改成double后效果也是一樣,
double 不是64位的嗎?
應該不會出現這個問題才對啊!

另外請教下,做運動控制和變頻控制不用浮點型數據類型嗎?

望指點!

   

相关帖子

沙发
wh6ic| | 2008-8-27 12:18 | 只看该作者

很多MCU的浮点只支持一种精度


看样子你的C编译器或者浮点库或者数制转换只支持单精度float. :-D
  你也可以查查 float.h/math.h 等头文件中关于单/双精度的相关定义

BTW, 运动控制或者变频完全没必要使用浮点, 一般来说32bit长整型就可以搞定, 而且大部分是加法和简单移位运算.

使用特权

评论回复
板凳
endlessss|  楼主 | 2008-8-27 16:56 | 只看该作者

運動控制器

由于目前的丟精度的只是一個變量,AxisPosition,所以我想到了一個辦發已經解決!
當AxisPosition大于10000.000f,就將AxisPosiSuper + AxisPosition/10000.
AxisPosition = AxisPosition  -(AxisPosition /10000)*10000
用這種辦法已經解決了。

另外,我有問過伺服設計工程師,在伺服內部確實沒有使用浮點型,遇到有小數的情況,整數和小數分別存儲、運算。

目前做的這個是運動控制器,帶CNC功能,所以為了方便使用了浮點型數據,
過陣子找顆帶FPU的32BITMCU,相信性能會有很大提升。

大家有32BIT 帶FPU的給小弟推薦幾個。
謝謝

使用特权

评论回复
地板
赤铸| | 2008-8-27 17:58 | 只看该作者

工业控制,16-bit MCU, 定点数(整数)应该是比较合适的

32-bit 的不一定好

使用特权

评论回复
5
endlessss|  楼主 | 2008-9-1 13:31 | 只看该作者

看到國外的同類型的產品都是使用32BIT MCU

而且是是三核的 MCU +MPU +FPU,
如果我用32BIT 帶FPU的芯片,精度和速度都會有很大的提高。只是目前這樣的芯片有些貴。

使用特权

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

本版积分规则

12

主题

62

帖子

0

粉丝