DSP中浮点转定点运算--定点数模拟浮点数运算及常见的策略
4.定点数模拟浮点数运算及常见的策略
相信大家到现在已经大致明白了浮点数转换成定点数运算的概貌。其实,原理讲起来很简单,真正应用到实际的项目中,可能会遇到各种各样的问题。具我的经验,常见的策略有如下几条:
1)除法转换为乘法或移位运算
我们知道,不管硬件平台如果变换,除法运算所需要的时钟周期都远远多于乘法运算和加减移位运算,尤其是在嵌入式应用中,“效率”显得尤为重要。以笔者的经验,其实,项目中的很大一部分除法运算是可以转换成乘法和移位运算,效率还是有很大提升空间的。
2)查表计算
有些运算表达式可能牵扯到很多头疼的数学公式,尤其是在嵌入式硬件平台上,出现这种公式很是头疼,因为硬件相关的软件平台提供的功能很有限,有的就没有很多“常见”的开方等数学公式。如果该类运算在项目中很少出现,而且其取值的个数也不多,那么就可以考虑对各种情况加以分析,把各种可能的结果制作成一个静态的表格(可以理解成数组),再加以简单的条件判断语句就可以解决该类问题。
3)级数展开
该问题的背景同上面的问题。对于一些数学公式,如果取值范围不好处理,就可以采用级数展开的方式。
4)分子分母同时变化
对于一些除法运算,为了保证精度,如果分子的扩大范围不够大的话,可以考虑缩小分母,也可以达到预期效果。具体的例子可以参考我的另一篇文章“解决了个困扰了2天的问题,定点运算问题”。
以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
DSP中浮点转定点运算--定点数的加减乘除运算
3.定点数的加减乘除运算 简单的说,各种运算的原则就是先把待运算的数据放大一定的倍数,在运算的过程中使用的放大的数据,在最终需要输出结果的时候再调整回去. 举个例来说,有如下运算: 复制代码 代码如下: - // coefs1 = 0.023423; coefs2=0.2131 float coefs1,coefs2; int result; - result = 34* coefs1+72* coefs2; - 代码的意思是,该模块需要输出一个整型的结果,但计算的过程中有浮点的运算.如果在定点
-
深入C/C++浮点数在内存中的存储方式详解
任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100.则在Intel CPU架构的系统中,存放方式为 10000100(低地址单元) 00000100(高地址单元),因为Intel CPU的架构是小端模式.但是对于浮点数在内存是如何存储的?目前所有的C/C++编译器都是采用IEEE所制定的标准浮点格式,即二进制科学表示法.在二进制科学表示法中,S=M*2^N 主要由三部分构成:符号位+阶码(N)+尾数(M).对于flo
-
浮点数在计算机中存储方式是怎样的
C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是float还是double在存储方式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53. 无论是单精度还是双精度在存储中都分为三个部分: 1.符号位(Sign
-
DSP中浮点转定点运算--浮点与定点概述
一:浮点与定点概述 1.1相关定义说明 定点数:通俗的说,小数点固定的数.以人民币为例,我们日常经常说到的如123.45¥,789.34¥等等,默认的情况下,小数点后面有两位小数,即角,分.如果小数点在最高有效位的前面,则这样的数称为纯小数的定点数,如0.12345,0.78934等.如果小数点在最低有效位的后面,则这样的数称为纯整数的定点数,如12345,78934等. 浮点数:一般说来,小数点不固定的数.比较容易的理解方式是,考虑以下我们日常见到的科学记数法,拿我们上面的数字举例,如123.
-
DSP中浮点转定点运算--举例及编程中的心得
5.举例及编程中的心得 5.1举例 "第3章 DSP芯片的定点运算.doc"这篇文章中给了一个很简单有能说明问题的例子,不想动大脑了,直接引用过来如下. 这是一个对语音信号(0.3kHz~3.4kHz)进行低通滤波的C语言程序,低通滤波的截止频率为800Hz,滤波器采用19点的有限冲击响应FIR滤波.语音信号的采样频率为8kHz,每个语音样值按16位整型数存放在insp.dat文件中. 例3.7 语音信号800Hz 19点FIR低通滤波C语言浮点程序 复制代码 代码如下: #inc
-
DSP中浮点转定点运算--浮点数的存储格式
二:浮点数的存储格式 2.1 IEEE floating point standard 上面我们说了,浮点数的小数点是不固定的,如果每个人都按照自己的爱好存储在电脑里,那不就乱套了吗?那么怎么在计算机中存储这种类型的数字呢?象这类古老的问题前人早都为我们做好了相应的规范,无规矩不成方圆吗.我们平时所说的浮点数的存储规范,就是由IEEE指定的,具体的规范文件是:IEEE Standard 754 for Binary Floating-Point Arithmetic.大家可以很容易的从网络上下载
-
DSP中浮点转定点运算--定点数模拟浮点数运算及常见的策略
4.定点数模拟浮点数运算及常见的策略 相信大家到现在已经大致明白了浮点数转换成定点数运算的概貌.其实,原理讲起来很简单,真正应用到实际的项目中,可能会遇到各种各样的问题.具我的经验,常见的策略有如下几条: 1)除法转换为乘法或移位运算 我们知道,不管硬件平台如果变换,除法运算所需要的时钟周期都远远多于乘法运算和加减移位运算,尤其是在嵌入式应用中,"效率"显得尤为重要.以笔者的经验,其实,项目中的很大一部分除法运算是可以转换成乘法和移位运算,效率还是有很大提升空间的. 2)查表计算 有些
-
php中让人头疼的浮点数运算分析
本文实例分析了php中让人头疼的浮点数运算.分享给大家供大家参考,具体如下: 在做电商的时候,计算价格是免不了的,然后发现了php的一个坑,口算应该正确的值,php运算出来会跟你不一样 请看下面的代码: $price=69.1; $count=100; $total=$price*$count-6910; echo $total; 你猜一下变量$total的值是多少,运行一下这个代码输出:-9.09494701773E-13 怎么解决这个问题呢? 使用round函数 代码修改成: $price=
-
Python3中的最大整数和最大浮点数实例
Python中的最大整数 Python中可以通过sys模块来得到int的最大值. python2中使用的方法是 import sys max = sys.maxint print (max) python3中使用的方法是: import sys max = sys.maxsize print (max) Python中获得最大浮点数 方法一:使用sys模块 >>> import sys >>> sys.float_info sys.floatinfo(max=1.797
-
聊聊Python中的浮点数运算不准确问题
大家好,老 Amy 来了.之前就意识到一个问题,但是最近又有朋友提出来了,所以就想着干脆记录下来,分享给大家叭~ 啥问题呢?请看题: 也就是说,需要大家计算1.1-1的值,很多朋友会说:"emmm-这还不简单,玩我呢?不就是0.1嘛" 但是如果你用 python 去执行一下,会发现结果跟你想的不太一样,如下图: 这样大家是不是发现了什么问题?是的,浮点数在运算过程中并没有保证完全精确,是什么原因导致了这种现象呢?很多朋友就会窃喜:"这不就是 Python 的 bug 嘛~&q
-
c++中vector的使用和模拟实现
一.接口介绍 1.插入数据 void push_back(const T& x) 在当前vector尾部插入x,如果容量不够扩大二倍. iterator insert(iterator pos, const T& x) 在POS位置插入元素x 2.容量相关 size_t capacity() 返回当前vector的容量(size+剩余容量) size_t size() 返回当前vector的元素个数 void resize(size_t n, const T& val = T())
-
C语言中关于库函数 qsort 的模拟实现过程
目录 前言 一.qsort函数 二.qsort函数实现思路 1. 底层原理 2. 函数传参 1). 第一个参数 2). 第二个参数 3). 第三个参数 4). 第四个参数 三.局部函数实现 四.全部代码汇集 五.总结 前言 我们在上一篇博客讲解了库函数qsort的使用,今天我为大家带来qsort的模拟实现.上一篇博客这个库函数的阅读链接:C语言中关于库函数 qsort 快排的用法 其实有人会问,我明明已经掌握了库函数qsort的使用方法,为何还要去写模拟实现,其实啊,学好一个东西,不仅仅只是会用
随机推荐
- php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
- 常用正则表达式与批注[收藏]
- Java数据导入功能之读取Excel文件实例
- 修改发贴的编辑功能
- 遍历echsop的region表形成缓存的程序实例代码
- ThinkPHP模板Switch标签用法示例
- python对json的相关操作实例详解
- MySQL数据库如何导入导出(备份还原)
- mySQL中LEN()与DATALENGTH()的区别
- jQuery动态添加、删除元素的方法
- 获取SQL Server表字段的各种属性实例代码
- 执行Insert Exec时的隐藏开销 分析
- Jquery实现跨域异步上传文件总结
- Android编程实现获取所有传感器数据的方法
- 实例简介PHP的一些高级面向对象编程的特性
- Android去除烦人的默认闪退Dialog
- 在 Windows服务器中启用/禁用SMBv1、SMBv2和SMBv3的方法
- Python中numpy模块常见用法demo实例小结
- numpy concatenate数组拼接方法示例介绍
- PHP大文件切割上传功能实例分析