第3讲 定点运算及浮点运算..
第3章-2定点数和浮点数PPT课件全文编辑修改

(2)浮点数的规格化
目的:字长固定的情况下提高表示精度的措施: 1 增加尾数位数(但数值范围减小) 2 采用浮点规格化形式
规格化方法:调整阶码使尾数满足下列关系: 尾数为原码表示时,无论正负应满足1/2<|d |<1 即:小数点后的第一位数一定要为1。 正数的尾数应为0.1x….x 负数的尾数应为1.1x….x 尾数用补码表示时,小数最高位应与数符符号位相反。 正数应满足 1/2≦d<1,即 0.1x….x 负数应满足 -1/2 > d≥ -1,即 1.0x….x
注意: 两操作数的绝对值相乘, 符号位单独处理。 寄存器A.B均设置双符号位,第1符号位始终是部分积符号,决定在右移时第1符号位补0 操作步数由乘数的尾数位数决定,用计数器Cd来计数。即作n次累加和移位。 最后是加符号位,根据Sx⊕Sy决定。
例如将十进制数178.125表示成微机中的单精度浮点数
解:178.125=10110010.001B =1.0110010001x27 指数E=7+127=134=10000110B 127是单精度浮点数应加的指数偏移量,其完整的浮点数形式为 : 0 10000110 011 0010 0010 0000 0000 0000 = 43322000H
3.3.1 定点数一位乘法 1. 定点原码一位乘
规则:在机器中采用A,B,C寄存器来分别存放部分积,被乘数和乘数 (1)在机器内一次加法操作只能求出两数之和,因此每求得一个相加数时,就得与上次部分积相加。 (2)人工计算时,相加数逐次向左偏移一位,由于最后的乘积位数是乘数(或被乘数)的两倍.由于在求本次部分积时,前一次部分积的最低位,不再参与运算,因此可将其右移一位。相加数可直送而不必偏移,于是用N位加法器就可实现两个N位数相乘。 (3)部分积右移时乘数寄存器同时右移一位,这样可以用乘数寄存器的最低位来控制相加数(取被乘数或零),同时乘数寄存器的最高位可接收部分积右移出来的一位,因此,完成乘法运算后,A寄存器中保存乘积的高位部分,乘数寄存器C中保存乘积的低位部分。
定点和浮点数表示

带符号整数:
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)定点整数 整数分带符号和不带符号两类,分别表示如下:
定点与浮点

在c语言中,单精度(float)数据类型为32bits,具体的如下图所示:整个32bits分三部分,即Sign:符号位,1 bit,0为正,1为负;Exponent(bias):指数部分,8 bits,存储格式为移码存储(后面还会说明),偏移量为127;Mantissa(fraction):尾数部分。
对应的双精度(double)类型的格式为:同样,64位也被分为了三部分,对照单精度,不用我说就可以理解各个部分的含义了吧?是不是有点迷糊了,不要怕,理论这个东西最能忽悠人了,看起来很高深,其实也就是个屁大的事,举个例子就很容易明白了。
举例说明,如3.24x103,则对应的部分为,Sign为0,3为指数部分(注意计算机里面存储的不是3,这里仅仅为了说明),3.24为尾数。
我们知道,计算机“笨”的要死,只认识0和1,那么到底一个浮点数值在计算机存储介质中是如何存储的呢?例如,我们要想偷窥浮点类型的值4.25在计算机硬盘中存储的庐山真面目,请跟我来:首先把4.25转换成二进制的表达方式,即100.01,在详细点,变成1.0001x22,好了,对号入座把。
Sign=0;Exponent(bias)=2+127=129 (偏移量为127,就是直接加上个127了);Mantissa=1.0001-1.0=0001(规格化后,小数点前总是整数1,全世界人都知道前面是1不是0,所以省略不写了,即尾数部分不包括整数部分;当别人问你,为什么23 bit的尾数部分可以表示24位的精度,知道怎么回答了吧。
靠,什么,没有看懂,再仔细读两便就知道了)。
对照上面的图示,相信你已经看明白了吧?相信你的智商。
为了加深认识,再来一个。
如果给定你一个二进制数字串,01000000100010000000000000000000,并告诉你这是一个float类型的值,让你说出它是老几,知道怎么算了吧?如果不知道,看下面的图,我就不废话解释了。
关于浮点数与定点数的理解

定点数与浮点数计算机处理的数值数据多数带有小数,小数点在计算机中通常有两种表示方法,一种是约定所有数值数据的小数点隐含在某一个固定位置上,称为定点表示法,简称定点数;另一种是小数点位置可以浮动,称为浮点表示法,简称浮点数。
1. 定点数表示法(fixed-point)所谓定点格式,即约定机器中所有数据的小数点位置是固定不变的。
在计算机中通常采用两种简单的约定:将小数点的位置固定在数据的最高位之前,或者是固定在最低位之后。
一般常称前者为定点小数,后者为定点整数。
定点小数是纯小数,约定的小数点位置在符号位之后、有效数值部分最高位之前。
若数据x 的形式为x = x0.x1x2…x n( 其中x0为符号位,x1~x n是数值的有效部分,也称为尾数,x1为最高有效位),则在计算机中的表示形式为:一般说来,如果最末位x n = 1,前面各位都为0 ,则数的绝对值最小,即|x|mi n = 2-n。
如果各位均为1,则数的绝对值最大,即|x|ma x =1-2-n 。
所以定点小数的表示范围是:2- n ≤ | x| ≤ 1 - 2- n定点整数是纯整数,约定的小数点位置在有效数值部分最低位之后。
若数据x 的形式为x = x0x1x2…x n ( 其中x0为符号位,x1~x n是尾数,x n为最低有效位),则在计算机中的表示形式为:定点整数的表示范围是:1≤ | x| ≤ 2n - 1当数据小于定点数能表示的最小值时,计算机将它们作0处理,称为下溢;大于定点数能表示的最大值时,计算机将无法表示,称为上溢,上溢和下溢统称为溢出。
计算机采用定点数表示时,对于既有整数又有小数的原始数据,需要设定一个比例因子,数据按其缩小成定点小数或扩大成定点整数再参加运算,运算结果,根据比例因子,还原成实际数值。
若比例因子选择不当,往往会使运算结果产生溢出或降低数据的有效精度。
用定点数进行运算处理的计算机被称为定点机。
2. 浮点数表示法(floating-point number)4与科学计数法相似,任意一个J进制数N,总可以写成N = J E × M式中M称为数N 的尾数(mantissa),是一个纯小数;E为数N 的阶码(e x ponent),是一个整数,J称为比例因子J E 的底数。
N03-定点除法浮点运算

Xi=S3AiBi+S2AiBi
Yi=Ai+S0Bi+S1Bi
Fi=Xi⊕Yi⊕Cn+i
Cn+i+1=Yi+XiCn+i
设 G=Y3+Y2X3+Y1X2X3+Y0X1X2X3 进位发生输出 P =X 0X 1X 2X 3 进位传送输出 (2.37)
则
Cn+4=G+PCn
G、P,有利于实现多片(组)ALU之间的先行进位 先行进位发生器(CLA)
0.1 1 0 1 商q 0.1 0 1 1 0.1 0 0 1 0 x(r0) 被除数小于除数,商0 -0.0 1 0 1 1 2-1y 除数右移1位,减除数,商1 0.0 0 1 1 1 0 r1 得余数r1 -0.0 0 1 0 1 1 2-2y 除数右移1位,减除数,商1 0.0 0 0 0 1 1 0 r2 得余数r2 -0.0 0 0 1 0 1 1 2-3y 除数右移1位,不减除数,商0 0.0 0 0 0 1 1 0 0 r3 得余数r3 -0.0 0 0 0 1 0 1 1 2-4y 除数右移1位,减除数,商1 0.0 0 0 0 0 0 0 1 r4 得余数r4 得x÷y的商q=0.1101,余数为r=0.00000001。
设有n位定点小数(定点整数也同样适用):
被除数x的原码为 [x]原=xf .xn-1„x1x0
除数y的原码为
[y]原=yf .yn-1„y1y0
则有商q=x/y,其原码为
[q]原=(xf⊕yf)+
(0.xn-1„x1x0/0.yn-1„y1y0)
商的符号运算qf=xf⊕yf
设被除数x=0.1001,除数y=0.1011
2.5.2 多功能算术/逻辑运算单元(ALU)
1. 基本思想
一位全加器(FA)的逻辑表达式为 Fi=Ai⊕Bi⊕Ci
定点数和浮点数课件

符号位
表示浮点数的正负,0表示正数,1 表示负数。
指数位
表示浮点数的指数部分,即小数点的 位置。
尾数位
表示浮点数的尾数部分,即小数点后 面的数字。
浮点数的范围和精度
范围
浮点数的范围取决于指数位的位 数和尾数位的位数,一般分为单 精度和双精度两种类型,单精度 范围较小,双精度范围较大。
精度
浮点数的精度取决于尾数位的位 数,位数越多,精度越高,能够 表示的数字越精确。
浮点数定义
浮点数是指小数点位置可以浮动的数 值表示方式,通常用于计算机内部运 算,其小数点位置可以根据需要移动。
浮点数的优点
浮点数的缺点
浮点数表示方式相对复杂,计算机内 部计算浮点数需要更多的时间和空间 资源,同时浮点数容易受到计算机内 部精度限制的影响。
浮点数表示方式的范围广泛,可以表 示非常大或非常小的数值,同时浮点 数精度高,能够准确表示小数。
具体实现可能会有所不同。
在定点数运算中,需要注意溢出、 舍入误差等问题。
一般来说,定点数运算的速度比 浮点数运算要快,因此在需要高 精度计算的情况下,定点数是一
种更好的选择。
2023
PART 03
浮点数的表示方法
REPORTING
浮点数的表示格式
IEEE 754标准
浮点数在计算机中采用IEEE 754标准 进行表示,包括符号位、指数位和尾 数位三个部分。
浮点数的运算规则
01
加减运算
浮点数的加减运算与普通加减运算类似,只需要对尾数位进行加减即可,
指数位不变。
02
乘除运算
浮点数的乘除运算需要将尾数位和指数位分开计算,然后组合得到结果。
乘法时尾数位需要左移一位,除法时尾数位需要右移一位。
浮点运算

简介当我们用不同的电脑计算圆周率时,会发现一台电脑的计算较另一台来讲结果更加精确。
或者我们在进行枪战游戏的时候,当一粒子弹击中墙壁时,墙上剥落下一块墙皮,同样的场面在一台电脑上的表现可能会非常的呆板、做作;而在另外一台电脑上就会非常生动形象,甚至与我们在现实中看到的所差无几。
这都是浮点运算能力的差异导致的。
定点与浮点大学计算机基础中已经了解过计算机的实数表示方法可分为两种即定点与浮点1、定点数:定点数指小数点在数中的位置是固定不变的,通常有定点整数和定点小数。
在对小数点位置作出选择之后,运算中的所有数均应统一为定点整数或定点小数,在运算中不再考虑小数问题。
(1)定义:数据中小数点位置固定不变的数(2)种类:定点整数(3)小数点在符号位与有效位之间。
注:定点数受字长的限制,超出范围会有溢出。
2、浮点数:浮点数的表示形式有点像科学计数法(*.*****×10^***),它的表示形式是0.*****×10^***,在计算机中的形式为 .***** e ±***),其中前面的星号代表定点小数,也就是整数部分为0的纯小数,后面的指数部分是定点整数。
利用这样的形式就能表示出任意一个整数和小数,例如1024就能表示成0.1024×10^4,也就是 .1024e+004,3.1415926就能表示成0.31415926×10^1,也就是 .31415926e+001,这就是浮点数。
浮点数进行的运算就是浮点运算。
注:其浮点数的精度由尾数决定,数的表示范围由阶码决定。
浮点数,这个复杂点,有三种格式单精度:_31_30________23_22___________0符号指数有效数双精度:_63_62__________52_51__________________0符号指数有效数扩展精度数:_79_78____________64_63___________________0符号指数有效数3、定点数与浮点数区别定点表示法运算直观,但数的表示范围较小,不同的数运算时要考虑比例因子的选取,以防止溢出。
对定点计算与浮点计算有了新的认识[转]
![对定点计算与浮点计算有了新的认识[转]](https://img.taocdn.com/s3/m/aa2fac1f7dd184254b35eefdc8d376eeaeaa171b.png)
对定点计算与浮点计算有了新的认识[转]因为长期纠结与这个问题,所以今天查阅了很多资料,包括C90,C99标准,ARM构架标准,GCC⼯具链⽂档和⼀些杂七杂⼋的技术⽂章,总算理清了⼀些思路,更正了⼀些观念。
⾸先,对于标准C本⾝来说,并没有定点⼩数的说法,其float double等数据类型都是定义为浮点格式(浮点格式有不同的标准,常⽤的是IEEE754),⽽对于特定的⽬标系统,其实现是依赖于编译器的。
对于ARM系列构架的处理器来说,编译器提供浮点运算的软件实现和硬件实现(需要浮点协处理器的⽀持)。
(但是ARM⽀持乘法指令,模拟浮点运算速度是否会有提⾼)。
对于DSP来说,⼀般分为浮点DSP与定点DSP,与ARM⼀样,若定点DSP需要进⾏浮点运算那么也是通过软件模拟来实现的,因为速度上没有优势。
DSP应该是⽀持单周期乘法的,这⼀点与通⽤处理器不同,虽说很多通⽤处理器也⽀持乘法指令,但是需要多个周期。
⽽若要提⾼速度,在没有浮点协处理器的情况下,是否应该采⽤定点运算⽅式。
实际上,定点运算就是将⼩数数据变为整数计算,⽽在程序实现是不引⼊浮点数据类型(标准C下),⽽规定⼩数点在数据中的位数。
但这样做会影响数据的表⽰范围,但整数计算不会损失精度(除法?)。
通⽤处理器进⾏DSP处理:专⽤的DSP芯⽚与通⽤处理器结构上不同,但是对于数字信号处理(DSP,不是DSP芯⽚)本⾝来说⽤哪种处理器进⾏计算并没有明确界定,这⼀点在很多⽂献和技术⽂档中都没有明确的说明。
前者应该是适合⽤作DSP的处理器,⽽后者也并不是不能做DSP应⽤,⽽且在很多领域这两者并没有⼀个显著的分别(数字信号处理的特点是⼤量的乘法累加运算),⽽在很多专⽤专业领域算法的实现上也会出现很多类似的计算。
那么应该选择哪⼀种芯⽚作为处理器就成为了⼀个很微妙的问题。
我在sourceforge中找到了⼀个fixed point库,提供⼀些基本的算术运算,⽤标准C实现,希望对以后有帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定点减法
设x=3.0,y=3.1,则浮点运算结果为z=x-y= 3.0-3.1=-0.1; Qx=13,Qy=13,Qz=15,则定点减法为: x=24576;y=25395; temp=25395; temp=x-temp=24576-25395=-819;
因为Qx<Qz,故 z=(int)(-819<<2)=3276。 为浮点值z=-3276/32768-0.1
结果超过16位的定点加法
例子: 设x=15000,y=20000,则浮点运算结果为z =x+y=15000+20000=35000,显然z>32767; Qx=1,Qy=0,Qz=0,则定点加法为: x=30000;y=20000; temp=20000<<1=40000; temp=temp+x=40000+30000=70000; z=70000L>>1=35000;
-2≤X≤1.9999390
. . . . . . -16384≤X≤16383.5 -32768≤X≤32767
加法/减法运算的C语言定点模拟
float x,y,z; z=x+y; 两个操作数的定标值一样 如果加法/减法的结果超出16位的表示范围, 则必须保留32位结果,以保证运算的精度
除法运算的C语言定点模拟
z = x/y zq 2Qz= xq 2 Q yq 2 zq
xq 2
( Qz Qx Q y )
Qx
y
yq
float x,y,z; z = x/y; int x,y,z; long temp; temp = (long)x; z = (temp<<(Qz-Qx+Qy))/y;
定点除法
设x = 18.4,y = 36.8,浮点运算值为z = x/y = 18.4/36.8 = 0.5;
Qx = 10,Qy = 9,Qz = 15;所以有
x = 18841, y = 18841;
temp = (long)18841; z = (18841L<<(15-10+9))/18841 = 308690944L/18841 = 16384; 因为商z的定标值为15,所以定点z = 16384即为浮 点 z = 16384/32768= 0.5
乘法运算的C语言定点模拟
z = xy z q 2
Qz
= xq y q 2
(Qx Q y )
Qz (Qx Q y ) z q = ( x q y q )2
float x,y,z; z = xy; int x,y,z; long temp; temp = (long)x; z = (temp×y) >> (Qx+Qy-Qz);
定点乘法
设x = 18.4,y = 36.8,则浮点运算值为z =18.4×36.8 = 677.12; Qx = 10,Qy = 9,Qz = 5,所以 x = 18841;y = 18841; temp = 18841L; z = (18841L*18841)>>(10+9-5) = 354983281L >>14 = 21666; 因为z的定标值为5,故定点 z = 21666即为 浮点的 z = 21666/32 = 677.08
定点加法
描述: int x,y,z; long temp; /*临时变量*/ temp=y<<(Qx-Qy); temp=x+temp; z=(int)(temp>>(Qx-Qz)), 若Qx≥Qz z=(int)(temp<<(Qz-Qx)), 若Qx≤Qz
定点加法
例子: 设x=0.5,y=3.1,则浮点运算结果为z=x+y =0.5+3.1=3.6; Qx=15,Qy=13,Qz=13,则定点加法为: x=16384;y=25395; temp=25395<<2=101580; temp=x+temp=16384+101580=117964; z=(int)(117964L>>2)=29491; 验算:z=29491/8192=3.6
三、DSP定点运算与浮点运算
数的定标 DSP程序的定点模拟 DSP芯片的定点运算 定点实现非线性函数的快速实现方法 浮点芯片中的数值表示格式 DSP浮点数的基本运算方法
一、定点运算及定点DSP
1、数据格式
2、运算方法
3、定点DSP芯片
1、数据格式
在定点DSP芯片中,采用定点数进行数值运算, 其操作数一般采用整型数来表示 DSP芯片的数以2的补码形式表示 数的定标:“小数点” 的位置 Q表示法和S表示法 对定点数而言,数值范围与精度是一对矛盾, 一个变量要想能够表示比较大的数值范围,必须 以牺牲精度为代价。
验算:由于z的Q值为15,所以定点值z=-3276即
结果超过16位表示范围
设x的Q值为Qx,y的Q值为Qy,且Qx>Qy,加 法结果z的定标值为Qz,则定点加法为: int x,y; long temp,z; temp=y<<(Qx-Qy); temp=x+temp; z=temp>>(Qx-Qz),若Qx≥Qz z=temp<<(Qz-Qx),若Qx≤Qz
z=x+y
zq 2
Qz
xq 2
= xq 2
Qx
yq 2
yq 2
(Qx Q y )
Qy
Q x
(Qx Q y )
2 Q x
= [ xq y q 2
] 2 Qx
z q [ xq y q2(Qz Qx )
定点数转换为浮点数
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
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