首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 云计算 >

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

2012-02-21 
如何解决嵌入式C的浮点数运算问题环境:板子QQ2440V3,内核2.6.13,编译器3.4.1PC端操作系统Fedora 10我的程

如何解决嵌入式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规范的浮点库即可,这个网上很多的。

热点排行