定点和浮点的区别:
1、定义区别:
(1)定点运算中,程序员必须时刻关注溢出的发生,为了防止溢出,要么不断进行移位定标,要么做截尾。定点表示具体的数。
(2)前者耗费大量时间和空间,后者则带来精度的损失。相反,浮点运算dsp扩大了动态范围,提高了精度,节省了运算时间和存储空间,因为大大减少了定标,移位和溢出检查。浮点无法精确表达需要取舍。
2、应用区别:
(1)硬件:浮点dsp处理器具有浮点/整数乘法器,整数/浮点算术逻辑运算单元ALU,适合存放扩展精度的浮点结果的寄存器等。
(2)软件:主要有浮点dsp编程的特点以及注意事项;定点dsp进行浮点运算时的定标,移位,检测溢出操作。即使比较两个相同的数,还是可能有微小的舍入差别。
浮点数的溢出处理:
1、浮点数的溢出是以其阶码溢出表现出来的。在加或减运算过程中要检查是否产生了溢出,若阶码正常,加(减)运算正常结束;若阶码溢出,则要进行相应处理。另外对尾数的溢出也需要处理。
2、阶码上溢,超过了阶码可能表示的最大值的正指数值,一般将其认为是+∞和-∞。
3、阶码下溢,超过了阶码可能表示的最小值的负指数值,一般将其认为是0。
4、尾数上溢,两个同符号尾数相加产生了最高位向上的进位,将尾数右移,阶码增1来重新对齐。
5、尾数下溢,在将尾数右移时,尾数的最低有效位从尾数域右端流出,要进行舍入处理。
以上内容参考:百度百科-定点数
以上内容参考:百度百科-浮点数
在选择计算机的数据表示方式时,通常需要考虑4点因素:
计算机处理的数据多带有小数点,小数点在计算机中可以有两种方法表示;一种数约定数值的小数点固定在某一位置,称为定点表示法,简称为 定点数 。对应的另一种方法,小数点可以任意浮动,称为浮点表示法,简称为 浮点数 。
所谓定点,就是约定机器中数据的小数点位置固定不变。在计算机中,通常将数据的小数点固定在数据的最高位之前或者最低位之后。前者称为 定点小数 ,后者称为 定点整数 。
定点小数 是纯小数,约定的小数点位置在符号位之后、有效数值部分最高位之前。若数据 x 的形式为 x = x0.x1x2…xn ( 其中x0为符号位,x1~xn是数值的有效部分,也称为尾数, x1为最高有效位 ),则在计算机中的表示形式为:
一般说来,如果最末位 xn = 1,前面各位都为 0 ,则数的绝对值最小,即 |x|min = 2^(-n) 。如果各位均为 1,则数的绝对值最大,即 |x|max =1-2^(-n) 。所以定点小数的表示范围是:
定点整数 是纯整数,约定的小数点位置在有效数值部分最低位之后。若数据 x 的形式为 x = x0 x1x2…xn ( 其中x0为符号位,x1~xn 是尾数, xn 为最低有效位 ),则在计算机中的表示形式为:
定点整数的表示范围是:
当数据小于定点数能表示的最小值时,计算机将它们作0处理,称为 下溢 ;大于定点数能表示的最大值时,计算机将无法表示,称为 上溢 ,上溢和下溢统称为 溢出 。
计算机采用定点数表示时,对于既有整数又有小数的原始数据,需要设定一个比例因子,数据按其缩小成定点小数或扩大成定点整数再参加运算,运算结果,根据比例因子,还原成实际数值。若比例因子选择不当,往往会使运算结果产生溢出或降低数据的有效精度。
用定点数进行运算处理的计算机被称为 定点机 。
与科学计数法相似,任意一个J进制数N,总可以写成:
式中M称为数 N 的 尾数(mantissa) ,是一个纯小数;E 为数 N 的 阶码(exponent) ,是一个整数,J称为比例因子 J^(E)的 底数 。这种表示方法相当于数的小数点位置随比例因子的不同而在一定范围内可以自由浮动,所以称为 浮点表示法 。
底数是事先约定好的(常取2),在计算机中不出现。在机器中表示一个浮点数时,一是要给出尾数,用定点小数形式表示。尾数部分给出有效数字的位数,因而决定了浮点数的表示精度。二是要给出阶码,用整数形式表示,阶码指明小数点在数据中的位置,因而决定了浮点数的表示范围。浮点数也要有符号位。因此一个机器浮点数应当由阶码和尾数及其符号位组成:
其中 ES 表示阶码的符号,占一位,E1~En 为阶码值,占 n 位,尾符是数 N 的符号,也要占一位。当底数取 2 时,二进制数 N 的小数点每右移一位,阶码减小 1,相应尾数右移一位;反之,小数点每左移一位,阶码加 1,相应尾数左移一位。
若不对浮点数的表示作出明确规定,同一个浮点数的表示就不是唯一的。例如 11.01 也可以表示成 0.011012^(-3) ,0.1101×2^(-2) 等等。为了提高数据的表示精度,当尾数的值不为 0 时,其绝对值应大于等于 0.5,即尾数域的最高有效位应为 1,否则要以修改阶码同时左右移小数点的方法,使其变成这一要求的表示形式,这称为 浮点数的规格化 表示。
当一个浮点数的尾数为 0 时,不论其阶码为何值,或者当阶码的值遇到比它能表示的最小值还小时,不管其尾数为何值,计算机都把该浮点数看成 0 值,称为 机器零 *。
浮点数所表示的范围比定点数大。假设机器中的数由 8 位二进制数表示(包括符号位):在定点机中这 8 位全部用来表示有效数字(包括符号);在浮点机中若阶符、阶码占 3 位,尾符、尾数占 5 位,在此情况下,若只考虑正数值,定点机小数表示的数的范围是 0.0000000 到 0.1111111,相当于十进制数的 0 到 127/128,而浮点机所能表示的数的范围则是 2 - 11×0.0001 到 211×0.1111,相当于十进制数的 1/128 到 7.5 。显然,都用 8 位,浮点机能表示的数的范围比定点机大得多。
尽管浮点表示能扩大数据的表示范围,但浮点机在运算过程中,仍会出现溢出现象。下面以阶码占 3 位,尾数占 5 位(各包括 1 位符号位)为例,来讨论这个问题。图 2-1 给出了相应的规格化浮点数的数值表示范围。
图 中,“可表示的负数区域”和“可表示的正数区域”及“0”,是机器可表示的数据区域;上溢区是数据绝对值太大,机器无法表示的区域;下溢区是数据绝对值太小,机器无法表示的区域。若运算结果落在上溢区,就产生了溢出错误,使得结果不能被正确表示,要停止机器运行,进行溢出处理。若运算结果落在下溢区,也不能正确表示之,机器当 0 处理,称为机器零。
一般来说,增加尾数的位数,将增加可表示区域数据点的密度,从而提高了数据的精度;增加阶码的位数,能增大可表示的数据区域。
定点就是小数点确定在第几位的.如果是整数,规定小数点在最后一位.若是小数,小数点就在第一位和第二位之间,比如0.1234e3就是定点表示的123.4.浮点就是小数点位置不确定,比如123.43,6557.521.在C语言中,一般单精度数据类型比如int,数据的范围是2的31次方,而双精度类型的整型比如longint的数据范围是2的63次方.所以双精度和单精度主要的区别在于数据的范围大小.欢迎分享,转载请注明来源:优选云