定点转浮点的Qn定义及计算公式方法
002 定点计算

确定变量的Q值实际上就是确定变量的动态范围 设变量的绝对值的最大值为|max|,注意|max|必须小于 或等于32767。取一个整数n,使它满足2n-1 <|max|<2n,则 有2-Q=2-15× 2n =2-(15-n),Q = 15-n。 确定变量的|max|有两种方法:一种是理论分析法,另 一种是统计分析法。
z = (temp*y) >> (Qx+Qy-Qz); z = (temp*y) << (Qz-Qx+Qy);
练习题
将下列数据表示为Q1~Q15的定点数 2.35647 15.3633 0.02698 4.39865 72.965912 0.29516 0.00395
例1:浮点加法,z=x+y,x,y,z为浮点数 先由x,y,z的数据范围算出其Q值,Qx,Qy,Qz zq*2-Qz=xq*2-Qx+yq*2-Qy=[xq+yq*2(Qx-Qy) ]*2-Qx zq=[xq+yq*2(Qx-Qy) ]*2Qz-Qx
int xq,yq,zq; long temp; /*临时变量*/ if(Qx≥Qy) temp=y<<(Qx-Qy); if(Qx<Qy) temp=y>>(Qy-Qx); zq=(xq << (Qz-Qx)) +(temp << (Qz-Qx));
例1:x=0.5,16bit定点化,取Q15, xq=0.5*215=16384 例2:x=4,16bit定点化,取Q12, xq=4*212=16384
特别地,整数可看作为Q0的小数。
浮点运算的定点化
对浮点运算进行定点化的方法是根据算法原理分析运 算公式左右两侧每一个数据的取值范围,为每一个数据确定 相应的Q值,再进行运算,运算规则为: 1. 定点加减法,需转换成相同的Q值才能加减 2. 定点乘法,不同Q值的数据相乘,相当于Q值相加,即 Q15数据乘以Q10数据结果为Q25数据 3. 定点除法,不同Q值数据相除,相当于Q值相减 4. 定点左移,相当于Q值增大 5. 定点右移,相当于Q值减小
计算机中数据有定点数和浮点数两种表达方式

计算机中数据有定点数和浮点数两种表达⽅式⼀、我们先来了解⼀下概念:(1)定点数:⼩数点固定在某个位置上的数据。
就好像 0.0000001 ,0.0001111;(2)浮点数:⼩数点位置可以浮动的数据。
就像数学中的 1222.2*10^3也可以表⽰为1.2222*10^6;浮点数表达式:N=M*R^E;N为浮点数,M为尾数(mantissa),E也阶码(exponent),R为阶的基数,也就是底数啦,就像上⾯的10,不过咱们计算机⾥的底数不会是10的。
R通常是⼀个常数,⼀般是2、8、16。
在⼀台计算机⾥,所有数据中的R是确定,且相同的。
⼆、定点数表达式:⼗进制 130.8125 = 10000010.1101 ⼆进制三、定义:⼩数点符号“.”不再表⽰出来,⽽是约定在默认的固定位置;定点数分为有符号数和⽆符号数;⽆符号数:没有符号位,字中所有的位均表⽰量值,范围0~2-1;有符号数:最左边⼀位为符号位(0 正,1 负),其余位数代表它的量值;m.n=1.23 符号位⼀位为0,量值位 23-bit=4-bit*5+3bit=ox*5+111=fffff+4+2+1=fffff+7=ox7fffff;有符号定点数: 纯⼩数纯整数m.n表⽰范围0<=|x|<=1-2^(-n)0<=|x|<=2^n-10<=|x|<=2^n-2^(-n)有效精度位数n-1位n-1位n-1位最⼩变化量2^(-n)12^(-n)四、数值的补码表⽰也分两种情况:(1)正数的补码:与原码相同。
例如,+9的补码是00001001。
(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。
例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码0000111按位取反为1111000;再加1,所以-7的补码是11111001。
已知⼀个数的补码,求原码的操作分两种情况:(1)如果补码的符号位为“0”,表⽰是⼀个正数,所以补码就是该数的原码。
定点和浮点数表示

带符号整数:
n+1位
S
|N|≤2n-1
符号位
不带符号整数: n+1
小数点
0≤|N|≤2n+1-1
小数点
(3) 浮点数
浮点数表示法对应于科学(指数)计数法,在计算机中一个浮点数 由两部分构成:阶码和尾数,阶码是指数,尾数是纯小数.
存储格式:
阶符 阶码 数符 尾数
•阶码只能是一个带符号的整数,用来指示尾数中的小数点应当向左 或向右移动的位数,阶码本身的小数点约定在阶码最右面. •尾数表示数值的有效数字,其本身的小数点约定在数符和尾数之间
. •浮点数的正.负是由尾数的数符确定,而阶码的正.负只决定小数点 的位置,即决定浮点数的绝对值大小. •尾数的位数决定数的精度,阶码的位数决定数的范围.
设尾数为4位,阶码为2位,则二进制数N = 101.1(B)的浮点数表示 形式为:
0
11
0 1011ຫໍສະໝຸດ 阶符 阶码 数符 尾数 该数二进制数科学表示法为:N = 0.1011 × 211
四.二进制数在计算机中的表示
1.数的定点和浮点表示
(1)定点小数 指小数点准确固定在数据某一位置上的小数. 一般固定在最高数据位的左边,小数点前边再设一位符号位.
表示方法 N=NsN-1N-2…N-m其中Ns为符号位
S 符号位
小数点
m + 1位 |N|≤1-2-m
(2)定点整数 整数分带符号和不带符号两类,分别表示如下:
关于dsp中程序定点数和浮点数转换问题(Q15格式)

关于dsp中程序定点数和浮点数转换问题(Q15格式)看ti的逆变器程序,看到采集后的ADBUF数据全部都是《5,这就搞不明白了,为什么要左移5呀?然后看到上面说是兼容Q15,在QQ群里也问了高手,说是用于DSP小数运算,于是在网上找了下Q15的定义,下面把Q15整理下。
许多DSP都是定点DSP,处理定点数据会相当快,但是处理浮点数据就会非常慢。
可以利用Q格式进行浮点数据到定点的转化,节约CPU时间。
实际应用中,浮点运算大都时候都是既有整数部分,也有小数部分的。
所以要选择一个适当的定标格式才能更好的处理运算。
Q格式表示为:Qm.n,表示数据用m比特表示整数部分,n比特表示小数部分,共需要m+n+1位来表示这个数据,多余的一位用作符合位。
假设小数点在n位的左边(从右向左数),从而确定小数的精度例如Q15表示小数部分有15位,一个short型数据,占2个字节,最高位是符号位,后面15位是小数位,就假设小数点在第15位左边,表示的范围是:-1<X<0.9999695 。
浮点数据转化为Q15,将数据乘以2^15;Q15数据转化为浮点数据,将数据除以2^15。
例如:假设数据存储空间为2个字节,0.333×2^15=10911=0x2A9F,0.333的所有运算就可以用0x2A9F 表示,同理10911×2^(-15)=0.332977294921875,可以看出浮点数据通过Q格式转化后是有误差的。
例:两个小数相乘,0.333*0.414=0.1378620.333*2^15=10911=0x2A9F,0.414*2^15=13565=0x34FDshort a = 0x2A9F;short b = 0x34FD;short c = a * b >> 15; //两个Q15格式的数据相乘后为Q30格式数据,因此为了得到Q15的数据结果需要右移15位这样c的结果是0x11A4=0001000110100100,这个数据同样是Q15格式的,它的小数点假设在第15位左边,即为0.001000110100100=0.1378173828125...和实际结果0.137862差距不大。
第7章DSP定点数和浮点数(重要)

第7章D S P定点数和浮点数(重要)本期教程主要跟大家讲解一下定点数和浮点数的基础知识,了解这些基础知识对于后面学习ARM官方的DSP库大有裨益。
特别是初学的一定要理解这些基础知识。
7.1 定点数和浮点数概念7.2 IEEE浮点数7.3 定点数运算7.4总结7.1定点数和浮点数概念如果小数点的位置事先已有约定,不再改变,此类数称为“定点数”。
相比之下,如果小数点的位置可变,则称为“浮点数”(定点数的本质是小数,整数只是其表现形式)。
7.1.1定点数常用的定点数有两种表示形式:如果小数点位置约定在最低数值位的后面,则该数只能是定点整数;如果小数点位置约定在最高数值位的前面,则该数只能是定点小数。
7.1.2浮点数在计算机系统的发展过程中,曾经提出过多种方法表达实数。
典型的比如相对于浮点数的定点数(Fixed Point Number)。
在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置。
货币的表达就可以使用这种方式,比如 99.00 或者 00.99 可以用于表达具有四位精度(Precision),小数点后有两位的货币值。
由于小数点位置固定,所以可以直接用四位数值来表达相应的数值。
SQL 中的 NUMBER 数据类型就是利用定点数来定义的。
还有一种提议的表达方式为有理数表达方式,即用两个整数的比值来表达实数。
定点数表达法的缺点在于其形式过于僵硬,固定的小数点位置决定了固定位数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的数。
最终,绝大多数现代的计算机系统采纳了所谓的浮点数表达方式。
这种表达方式利用科学计数法来表达实数,即用一个尾数(Mantissa ),一个基数(Base),一个指数(Exponent)以及一个表示正负的符号来表达实数。
比如 123.45 用十进制科学计数法可以表达为 1.2345 × 102,其中 1.2345 为尾数,10 为基数,2 为指数。
浮点数利用指数达到了浮动小数点的效果,从而可以灵活地表达更大范围的实数。
第3讲 定点运算及浮点运算

定点数转换为浮点数
x float xq 2Q
浮点数 x=0.5,定标 Q=15, 则定点数=0.5*32768=16384
Q表示 Q15
S表示 S0.15
十进制数表示范围 -1≤X≤0.9999695
Q14
. . . . . . Q1 Q0
S1.14
. . . . . . S14.1 S15.0
定点加法
被加数 加数
0 0 X X X X X X X X X X X X X X
0 0 X X X X X X X X X X X X X X
无溢出 被加数 加数
0 1 X X X X X X X X X X X X X X
0 1 X X X X X X X X X X X X X X
有溢出
定点加法
Q表示法16进制数2000H
Q0表示为8192
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
符 号 位
Q15表示为0.25
小数点的位置
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
小数点的位置
浮点数与定点数的转换关系
浮点数转换为定点数
xq int x 2Q
提高查表法的精度 扩大自变量范围
混合法
提高查表法的精度
扩大查表法的范围
设:表的范围为0.5 ~ 1 ,X为大于0.5的数 则:X m 2e 式中, 0.5 m 1 ,e为整数 log 2 ( X ) log 2 (m 2e ) log 2 (m ) log 2 (2e ) log 2 (m ) e 例如: log 2 (10000) log 2 (0.61035 214 ) log 2 (0.61035) 14 13.2877
c语言定点数转浮点数函数

c语言定点数转浮点数函数
在C语言中,我们可以使用以下函数将定点数转换为浮点数:
c.
float fixedToFloat(int fixedNum, int fracBits) {。
return fixedNum / (float)(1 << fracBits);
}。
在这个函数中,`fixedNum`是定点数,`fracBits`是小数部分
的位数。
我们首先将`fixedNum`除以2的`fracBits`次方,然后将
结果转换为浮点数并返回。
另外,还有一些其他方法可以实现定点数到浮点数的转换,比
如直接使用移位操作或者乘以适当的倍数来实现。
但是上面的方法
是一种简单且常用的实现方式。
需要注意的是,定点数和浮点数在表示方式和精度上有所不同,
因此在进行转换时需要特别小心,以确保精度不会丢失。
另外,还
需要考虑溢出和舍入误差等问题,以保证转换的准确性。
总的来说,定点数到浮点数的转换需要根据具体的需求和应用
场景来选择合适的方法,并且在实现时需要注意精度和溢出等问题。
一文了解FPGA浮点小数与定点小数的换算及应用

一文了解FPGA浮点小数与定点小数的换算及应用定点小数运算有些FPGA中是不能直接对浮点数进行操作的,只能采用定点数进行数值运算。
所谓定点小数就是把小数点的位置固定,我们要用整数来表示小数。
先以10进制为例。
如果我们能够计算12+34=46的话,当然也就能够计算1.2+3.4 或者0.12+0.34了。
所以定点小数的加减法和整数的相同,并且和小数点的位置无关。
乘法就不同了。
12*34=408,而1.2*3.4=4.08。
这里1.2的小数点在第1位之前,而4.08的小数点在第2位之前,小数点发生了移动。
所以在做乘法的时候,需要对小数点的位置进行调整?!可是既然我们是做定点小数运算,那就说小数点的位置不能动!!怎么解决这个矛盾呢,那就是舍弃最低位。
也就说1.2*3.4=4.1,这样我们就得到正确的定点运算的结果了。
所以在做定点小数运算的时候不仅需要牢记小数点的位置,还需要记住表达定点小数的有效位数。
上面这个例子中,有效位数为2,小数点之后有一位。
现在进入二进制。
我们的定点小数用16位二进制表达,最高位是符号位,那么有效位就是15位。
小数点之后可以有0 - 15位。
我们把小数点之后有n位叫做Qn,例如小数点之后有12位叫做Q12格式的定点小数,而Q0就是我们所说的整数。
Q12的正数的最大值是0 111 。
111111111111,第一个0是符号位,后面的数都是1,那么这个数是十进制的多少呢,很好运算,就是0x7fff / 2= 7.999755859375。
对于Qn格式的定点小数的表达的数值就它的整数值除以2。
在计算机中还是以整数来运算,我们把它想象成实际所表达的值的时候,进行这个运算。
反过来把一个实际所要表达的值x转换Qn型的定点小数的时候,就是x*2了。
例如0.2的Q12型定点小数为:0.2*2= 819.2,由于这个数要用整数储存,所以是819 即0x0333。
因为舍弃了小数部分,所以0x0333不是精确的0.2,实际上它是819/2=0.199951171875。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定点转浮点的Qn定义及计算公式方法
以16位的有符号数字为例,我们常见的整数形式就是这里说的Q0(小数点在最右边)格式,范围是:-32768~32767。
这里的n表示小数点的位置,习惯认为16位有符号数有1-16的位置,那么Qn这里的n就是指第n+1个数位右下面,如Q0就是指第1个数位右下面。
下表是不同Qn的表示精度和范围,并给出了计算公式。
假设一个浮点数由C*(Sx+Sy)组成,其中C表示符号,取1(正)或者-1(负),Sx指整数部分,Sy指小数部分,将该浮点数转换成定点数Qn。
则:Q n=0x8000+(S x≪n)H+2n∗S y
H
C=−1
(S x≪n)H+2n∗S y
H
C=1
举例1:
十进制小数8.36用Q11如何表示:
∵
Sx<<11 = 8*(2^11)= 16384 = 0x4000
(2^n)*Sy = (2^11)*0.36 = 737 = 0x2E1
∴
Q11(8.36)= 0x42E1
举例2:
十进制小数-0.27用Q15如何表示:
∵
0x8000+Sx<<15 = 0x8000+0*(2^11)= 0x8000
(2^n)*Sy = (2^15)*0.27 = 8847 = 0x228F
∴
Q15(-0.27)= 0xA28F
Nike27@。