4.定点数模拟浮点数运算及常见的策略
相信大家到现在已经大致明白了浮点数转换成定点数运算的概貌。其实,原理讲起来很简单,真正应用到实际的项目中,可能会遇到各种各样的问题。具我的经验,常见的策略有如下几条:
1)除法转换为乘法或移位运算
我们知道,不管硬件平台如果变换,除法运算所需要的时钟周期都远远多于乘法运算和加减移位运算,尤其是在嵌入式应用中,“效率”显得尤为重要。以笔者的经验,其实,项目中的很大一部分除法运算是可以转换成乘法和移位运算,效率还是有很大提升空间的。
2)查表计算
有些运算表达式可能牵扯到很多头疼的数学公式,尤其是在嵌入式硬件平台上,出现这种公式很是头疼,因为硬件相关的软件平台提供的功能很有限,有的就没有很多“常见”的开方等数学公式。如果该类运算在项目中很少出现,而且其取值的个数也不多,那么就可以考虑对各种情况加以分析,把各种可能的结果制作成一个静态的表格(可以理解成数组),再加以简单的条件判断语句就可以解决该类问题。
3)级数展开
该问题的背景同上面的问题。对于一些数学公式,如果取值范围不好处理,就可以采用级数展开的方式。
4)分子分母同时变化
对于一些除法运算,为了保证精度,如果分子的扩大范围不够大的话,可以考虑缩小分母,也可以达到预期效果。具体的例子可以参考我的另一篇文章“解决了个困扰了2天的问题,定点运算问题”。
以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持小牛知识库。
本文向大家介绍DSP中浮点转定点运算--浮点与定点概述,包括了DSP中浮点转定点运算--浮点与定点概述的使用技巧和注意事项,需要的朋友参考一下 一:浮点与定点概述 1.1相关定义说明 定点数:通俗的说,小数点固定的数。以人民币为例,我们日常经常说到的如123.45¥,789.34¥等等,默认的情况下,小数点后面有两位小数,即角,分。如果小数点在最高有效位的前面,则这样的数称为纯小数的定点数,
本文向大家介绍DSP中浮点转定点运算--浮点数的存储格式,包括了DSP中浮点转定点运算--浮点数的存储格式的使用技巧和注意事项,需要的朋友参考一下 二:浮点数的存储格式 2.1 IEEE floating point standard 上面我们说了,浮点数的小数点是不固定的,如果每个人都按照自己的爱好存储在电脑里,那不就乱套了吗?那么怎么在计算机中存储这种类型的数字呢?象这类古老的问题前人早都
本文向大家介绍DSP中浮点转定点运算--定点数的加减乘除运算,包括了DSP中浮点转定点运算--定点数的加减乘除运算的使用技巧和注意事项,需要的朋友参考一下 3.定点数的加减乘除运算 简单的说,各种运算的原则就是先把待运算的数据放大一定的倍数,在运算的过程中使用的放大的数据,在最终需要输出结果的时候再调整回去。 举个例来说,有如下运算: 代码的意思是,该模块需要输出一个整型的结果,但计算的过程中有浮
我阅读关于浮点和舍入在浮点算术期间发生的错误。 我读了很多关于IEEE754单精度/双精度格式的文章。我知道有符号位、8(或)11位指数和23(或)52位有效位以及隐式前导位。 我也知道分母不是质因数2的实数不能完全表示,例如二进制中的0.1是0.0001100110011...... 我知道0.1 0.1 0.1不等于0.3,因为舍入误差的累积。 同样,0.5也可以用二进制格式表示,因为它是1/
对于这些代码行,我得到0作为输出,即它们都是相等的。现在,如果我理解正确,a b和c可能会存储稍微不同版本的真值.3因此,当做一个Float.compare(...)对这些值,我希望得到一个输出值,而不是0。为什么我把它们取为0?
以下是go中的示例代码: 结果线A1、B1和C1之间的差异是可以理解的。然而,从A2开始到C2魔法来了。来自B2和C2的结果都与来自A2线的结果不匹配。对于x2行(x=A、B或C)也是如此——但是x2和x4的输出是相同的。 为了确保,让我们以二进制形式打印结果。 上面代码中的一些事实(一个在bin表单中): 行A11和C11之间有差异(最后一位数字——就在指数之前)。 行A12和C12几乎相同(除