第3讲 定点运算及浮点运算..
- 格式:ppt
- 大小:368.00 KB
- 文档页数:58
在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 的底数。
简介当我们用不同的电脑计算圆周率时,会发现一台电脑的计算较另一台来讲结果更加精确。
或者我们在进行枪战游戏的时候,当一粒子弹击中墙壁时,墙上剥落下一块墙皮,同样的场面在一台电脑上的表现可能会非常的呆板、做作;而在另外一台电脑上就会非常生动形象,甚至与我们在现实中看到的所差无几。
这都是浮点运算能力的差异导致的。
定点与浮点大学计算机基础中已经了解过计算机的实数表示方法可分为两种即定点与浮点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、定点数与浮点数区别定点表示法运算直观,但数的表示范围较小,不同的数运算时要考虑比例因子的选取,以防止溢出。
对定点计算与浮点计算有了新的认识[转]因为长期纠结与这个问题,所以今天查阅了很多资料,包括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实现,希望对以后有帮助。
定点数与浮点数转小数点的表示为了节省内存,计算机中数值型数据的小数点的位置是隐含的,且小数点的位置既可以是固定的,也可以是变化的。
定点数与浮点数如果小数点的位置事先已有约定,不再改变,此类数称为"定点数"。
相比之下,如果小数点的位置可变,则称为"浮点数"。
⑴定点数。
常用的定点数有两种表示形式:如果小数点位置约定在最低数值位的后面,则该数只能是定点整数;如果小数点位置约定在最高数值位的前面,则该数只能是定点小数。
例如,假定用两个字节存放一个定点数,则以定点方式表示的十进制整数195为:这里,(-0.6876)10=(-0.10110000000001101…)2,转换为无限循环小数,存储时多余的位被截断。
如果知道一个定点数的小数点位置约定和占用存储空间大小,那么很容易确定其表示数的范围。
⑵浮点数。
浮点数表示法来源于数学中的指数表示形式,如193可以表示为0.193x103或1.93x102等。
一般地,数的指数形式可记作:N=M xRC其中,M称为"尾数",C称为"阶码"。
在存储时,一个浮点数所占用的存储空间被划分为两部分,分别存放尾数和阶码。
尾数部分通常使用定点小数方式,阶码则采用定点整数方式。
尾数的长度影响该数的精度,而阶码则决定该数的表示范围。
同样大小的空间中,可以存放远比定点数取值范围大得多的浮点数,但浮点数的运算规则比定点数更复杂。
1.什么是浮点数在计算机系统的发展过程中,曾经提出过多种方法表达实数。
典型的比如相对于浮点数的定点数(Fixed Point Number)。
在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置。
货币的表达就可以使用这种方式,比如99.00或者00.99可以用于表达具有四位精度(Precision),小数点后有两位的货币值。
由于小数点位置固定,所以可以直接用四位数值来表达相应的数值。
定点运算浮点运算嵌入式浮点运算与定点运算是嵌入式系统中两种常见的数值表示与计算方式。
本文将重点讨论定点运算在嵌入式系统中的应用。
1. 定点运算概述定点运算是指使用整数来表示和计算数据的一种方法。
在嵌入式系统中,由于资源有限,使用定点运算可以减少计算量,提高系统性能。
定点运算适用于一些不需要高精度计算的场景。
2. 定点数表示在定点运算中,我们需要选择合适的定点数表示形式。
常见的定点数表示形式有Q格式和补码格式。
Q格式是一种带有小数点位数的定点数表示方法,可以通过设置小数位数来控制数值的精度。
补码格式是一种常见的整数表示方法,可以表示正数和负数。
3. 定点运算原理定点运算的核心原理是将浮点数转换为定点数,并通过定点数之间的运算来实现数值计算。
在定点运算中,我们需要注意数据溢出和精度损失的问题。
同时,还需要考虑定点数之间的位移操作、溢出处理以及舍入策略的选择。
4. 定点运算的优势与应用相比于浮点运算,定点运算具有计算速度快、占用存储空间少的优势。
因此,在一些嵌入式系统中,特别是对计算速度要求较高的系统中,定点运算被广泛应用。
例如,在信号处理、图像处理和音频处理等领域,定点运算可以有效地提升系统的性能和效率。
5. 定点运算的局限性与克服方法尽管定点运算在嵌入式系统中具有广泛的应用,但也存在一些局限性。
定点运算对数值精度要求较高,容易出现溢出和精度损失的问题。
为了克服这些问题,我们可以采用增加定点数位数、使用更高精度的算法以及优化定点数表示等方法。
本文简要介绍了定点运算在嵌入式系统中的应用。
定点运算作为一种有效的数值计算方法,具有计算速度快、资源占用少的优势。
在实际应用中,我们需要根据具体的系统需求选择合适的定点数表示方法,并结合定点运算的原理和优化技巧,来提高嵌入式系统的性能和效率。
以上为本文对定点运算浮点运算嵌入式的简要介绍,希望能够对读者理解和应用定点运算提供一定的指导和帮助。
定点整数、定点小数、浮点数和指数是数学中常见的概念,它们在数字表示和运算中都起着重要的作用。
本文将介绍它们的定义、区别和通联,希望读者通过本文的阐述能够更加深入地理解这些概念。
一、定点整数定点整数是指在固定的位置表示的整数。
在计算机中,定点整数是直接表示整数值的,通常使用一个固定的位数来表示整数部分和小数部分。
8位的定点整数表示形式为sxxxxxxx,其中s表示正负号,x表示整数部分。
由于定点整数的位数是固定的,所以它能够表示的范围是有限的,但在一定的范围内可以得到较高的精度。
二、定点小数定点小数是指小数点位置固定的数。
它和定点整数相似,但是它的小数点位置是固定的,即小数点后面的位数是固定的。
三、浮点数浮点数是指用科学记数法来表示的数。
它由一个有效数字部分和一个指数部分组成。
有效数字部分是一个带小数点的十进制数,指数部分是一个用科学记数法表示的整数。
浮点数的特点是可以表示很大或很小的数,并且对于一些小数运算有比较好的精度。
但是由于浮点数的表示形式是二进制的,所以在表示某些十进制小数时会有精度损失的问题。
四、指数指数是表示数的次方的方法。
指数可以为整数、小数或者是分数。
当指数为整数时,结果很容易计算;当指数为小数或者分数时,结果需要通过计算机程序或者数学公式来计算。
定点整数、定点小数、浮点数和指数的关系可以从以下几个方面来看:1. 表示范围。
定点整数和定点小数的表示范围是固定的,而浮点数的表示范围是可以很大或者很小的。
指数的作用就是可以表示很大或者很小的数。
2. 表示精度。
定点整数和定点小数在一定范围内有较高的表示精度,而浮点数的精度会受到位数限制和表示问题的影响。
指数的作用是可以通过乘方运算来得到某些较大或者较小的数。
3. 表示方法。
定点整数和定点小数使用固定的位数来表示,而浮点数使用科学记数法来表示。
在实际的计算中,需要根据具体的需求来选择合适的表示方法。
在一些要求较高的计算中,可以使用浮点数来表示或者计算;在一些对精度要求较高的计算中,可以使用定点整数和定点小数来进行计算。
浮点运算和定点运算
浮点运算和定点运算是计算机中常见的两种数值运算方式。
浮点运算是指在计算机中使用浮点数进行的数值运算,浮点数由尾数和指数两部分组成,用于表示实数。
其特点是可表示很大或很小的数字,而且精度可以控制,在科学计算、数字信号处理等领域有广泛应用。
但是其缺点是计算速度相对较慢,而且会因为舍入误差而产生精度误差。
而定点运算是指在计算机中使用定点数进行的数值运算,定点数通常是整数,其小数点位置是固定的。
它的特点是计算速度快,不会产生舍入误差,但是其精度不如浮点运算,只能用于一些对精度要求不高、要求计算速度快的应用场合,比如图像、视频等。
在实际应用中,通常会根据具体需求选择浮点运算或定点运算。
对于需要高精度计算的应用,如科学计算,一般采用浮点运算;而对于要求计算速度和实时性比较高的应用,如多媒体处理,通常采用定点运算。
同时,现代计算机中的CPU、GPU等处理器都具有硬件支持浮点运算和定点运算,可以根据应用场景智能地选择合适的数值运算方式,提高计算效率和精度。
浮点转定点运算
浮点转定点运算是指将浮点数转换为定点数进行运算。
浮点数是一种表示实数的方法,能够表示很大或很小的数,并具有一定的精度。
而定点数是指小数点固定在某个位置的数,一般用于实现整数运算。
浮点转定点运算的具体步骤如下:
1. 确定定点数的小数点位置:根据具体情况,确定定点数的小数点位置。
一般情况下,可以将小数点放在整数的最低位。
2. 将浮点数乘以一个倍数:将浮点数乘以一个适当的倍数,使得小数部分变为整数。
乘法的倍数应根据具体情况来确定,一般选择一个与浮点数小数位数相对应的倍数。
3. 取整操作:对乘法结果进行取整操作,得到定点数。
4. 考虑符号位:根据实际需要,添加符号位。
5. 进行运算:进行定点数的运算。
6. 结果转换:将计算结果转换为浮点数表示,即将小数点恢复到原来的位置并
进行取位操作。
需要注意的是,在浮点转定点运算过程中,会引入一定的误差,因为定点数的精度是固定的,而浮点数的精度是可变的。
因此,在进行精确计算时,需要注意误差的累积问题。
定点数与浮点数计算机处理的数值数据多数带有小数,小数点在计算机中通常有两种表示方法,一种是约定所有数值数据的小数点隐含在某一个固定位置上,称为定点表示法,简称定点数;另一种是小数点位置可以浮动,称为浮点表示法,简称浮点数。
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)与科学计数法相似,任意一个J进制数N,总可以写成N = J E × M式中M称为数N 的尾数(mantissa),是一个纯小数;E 为数N 的阶码(e x ponent),是一个整数,J称为比例因子J E 的底数。