当前位置: 代码迷 >> 高性能计算 >> 怎么解决嵌入式C的浮点数运算有关问题
  详细解决方案

怎么解决嵌入式C的浮点数运算有关问题

热度:2331   发布时间:2013-02-26 00:00:00.0
如何解决嵌入式C的浮点数运算问题
环境:
板子QQ2440V3,内核2.6.13,编译器3.4.1
PC端操作系统Fedora 10

我的程序在板子上运行加密算法,然后在PC端解密,结果解密失败了。
然而在板子上加密后直接解密,或者在PC端加密后解密,都能得到正确结果。
最后发现加密时板子上产生的二进制序列(加密解密时需用到)与PC端所产生的不同(刚开始几十位还是相同的,之后就不一样了)。这是导致分开加密、解密失败的原因。
我这个加密算法中需要用到比较精确的浮点数(double类型)运算(精确到小数点后比较多的位数)。
不知道是否是浮点数精确度不一样所导致?有没有解决的方法?

------解决方案--------------------------------------------------------
如果你的板子不支持浮点运算,那么就需要进行定点话。定点话的一个重要的步骤就是定标,说白了就是确定小数点的位置,位置被成为Q值。
举个例子来说
设变量的绝对值的最大值为|max|,注意|max|必须小于或等于32767。取一个整数n,使满足
2n-1<|max|<2n
则有
2-Q=2-15*2n=2-(15-n)
Q=15-n
例如,某变量的值在-1至+1之间,即|max|<1,因此n=0,Q=15-n=15。

你可以查一下定点算法的书籍。一般ARM书籍里边有介绍的。嵌入式系统开发,或者嵌入式软件设计之类,说起来内容也比较多!~

------解决方案--------------------------------------------------------
楼主既然都说要double型的浮点能力了,用楼上这招显然不行。

编译器支持的话,可以由编译器编译过程关联整数模拟的浮点库,

否则找一个符合IEEE 754规范的浮点库即可,这个网上很多的。
  相关解决方案