浮点操作的方法
发布网友
发布时间:1天前
我来回答
共1个回答
热心网友
时间:1天前
浮点数的加减运算一般由以下五个步骤完成:对阶、尾数运算、规格化、舍入处理、溢出判断
一、对阶
所谓对阶是指将两个进行运算的浮点数的阶码对齐的操作。对阶的目的是为使两个浮点数的尾数能够进行加减运算。因为,当进行M x·2Ex与M y·2Ey加减运算时,只有使两浮点数的指数值部分相同,才能将相同的指数值作为公因数提出来,然后进行尾数的加减运算。对阶的具体方法是:首先求出两浮点数阶码的差,即⊿E=E x-E y,将小阶码加上⊿E,使之与大阶码相等,同时将小阶码对应的浮点数的尾数右移相应位数,以保证该浮点数的值不变。几点注意:
(1)对阶的原则是小阶对大阶,之所以这样做是因为若大阶对小阶,则尾数的数值部分的高位需移出,而小阶对大阶移出的是尾数的数值部分的低位,这样损失的精度更小。
(2)若⊿E=0,说明两浮点数的阶码已经相同,无需再做对阶操作了。
(3)采用补码表示的尾数右移时,符号位保持不变。
(4)由于尾数右移时是将最低位移出,会损失一定的精度,为减少误差,可先保留若干移出的位,供以后舍入处理用。
二、尾数运算
尾数运算就是进行完成对阶后的尾数相加减。这里采用的就是我们前面讲过的纯小数的定点数加减运算。
三、结果规格化
在机器中,为保证浮点数表示的唯一性,浮点数在机器中都是以规格化形式存储的。对于IEEE754标准的浮点数来说,就是尾数必须是1.M的形式。由于在进行上述两个定点小数的尾数相加减运算后,尾数有可能是非规格化形式,为此必须进行规格化操作。
规格化操作包括左规和右规两种情况。
左规操作:将尾数左移,同时阶码减值,直至尾数成为1.M的形式。例如,浮点数0.0011·25是非规格化的形式,需进行左规操作,将其尾数左移3位,同时阶码减3,就变成1.1100·22规格化形式了。
右规操作:将尾数右移1位,同时阶码增1,便成为规格化的形式了。要注意的是,右规操作只需将尾数右移一位即可,这种情况出现在尾数的最高位(小数点前一位)运算时出现了进位,使尾数成为10.xxxx或11.xxxx的形式。例如,10.0011·25右规一位后便成为1.00011·26的规格化形式了。
四、 舍入处理
浮点运算在对阶或右规时,尾数需要右移,被右移出去的位会被丢掉,从而造成运算结果精度的损失。为了减少这种精度损失,可以将一定位数的移出位先保留起来,称为保护位,在规格化后用于舍入处理。
IEEE754标准列出了四种可选的舍入处理方法:
(1)就近舍入(round to nearest)这是标准列出的默认舍入方式,其含义相当于我们日常所说的“四舍五入”。例如,对于32位单精度浮点数来说,若超出可保存的23位的多余位大于等于100…01,则多余位的值超过了最低可表示位值的一半,这种情况下,舍入的方法是在尾数的最低有效位上加1;若多余位小于等于011…11,则直接舍去;若多余位为100…00,此时再判断尾数的最低有效位的值,若为0则直接舍去,若为1则再加1。
(2)朝+∞舍入(round toward +∞)对正数来说,只要多余位不为全0,则向尾数最低有效位进1;对负数来说,则是简单地舍去。
(3)朝-∞舍入(round toward -∞)与朝+∞舍入方法正好相反,对正数来说,只是简单地舍去;对负数来说,只要多余位不为全0,则向尾数最低有效位进1。
(4)朝0舍入(round toward 0)
即简单地截断舍去,而不管多余位是什么值。这种方法实现简单,但容易形成累积误差,且舍入处理后的值总是向下偏差。
五、 溢出判断
与定点数运算不同的是,浮点数的溢出是以其运算结果的阶码的值是否产生溢出来判断的。若阶码的值超过了阶码所能表示的最大正数,则为上溢,进一步,若此时浮点数为正数,则为正上溢,记为+∞,若浮点数为负数,则为负上溢,记为-∞;若阶码的值超过了阶码所能表示的最小负数,则为下溢,进一步,若此时浮点数为正数,则为正下溢,若浮点数为负数,则为负下溢。正下溢和负下溢都作为0处理。
要注意的是,浮点数的表示范围和补码表示的定点数的表示范围是有所不同的,定点数的表示范围是连续的,而浮点数的表示范围可能是不连续的。
浮点操作的方法
左规操作:将尾数左移,同时阶码减值,直至尾数成为1.M的形式。例如,浮点数0.0011·25是非规格化的形式,需进行左规操作,将其尾数左移3位,同时阶码减3,就变成1.1100·22规格化形式了。右规操作:将尾数右移1位,同时阶码增1,便成为规格化的形式了。要注意的是,右规操作只需将尾数右移一位即可...
什么是浮点运算?
浮点运算包括加法、减法、乘法和除法等基本算术操作。在进行浮点运算时,计算机首先处理操作数的符号位,然后处理指数部分,最后处理尾数部分。由于浮点运算涉及到小数的近似表示和舍入误差,因此有时可能会产生一些不精确的结果。这也是为什么在进行科学计算或金融计算时,需要对浮点运算的结果进行额外的验证和...
js 数字、浮点数操作、格式化?
浮点小数都是用除法进行存储的,所以我会采用如下几种方法 首先小数转字符串,然后小数点前后的分别进行运算 例如2.345 + 3.456 = [(2+3) +"." +( 345+456)].join("")这样就能取得结果了
plc浮点数用法
1. 在PLC编程软件中,选择合适的数据类型,通常是浮点数类型,如REAL或FLOAT。2. 根据需要,定义浮点数变量,并为其分配内存空间。3. 在程序中使用浮点数变量进行计算比较或其他操作。4. 根据具体的PLC编程语言,使用相应的语法和函数来操作浮点数变量,例如加法减法乘法除法等。5. 在程序中使用适当的...
到底浮点运算是什么
在计算机科学中,浮点(英语:floating point,缩写为FP)是一种对于实数的近似值数值表现法,由一个有效数字(即尾数)加上幂数来表示,通常是乘以某个基数的整数次指数得到。以这种表示法表示的数值,称为浮点数(floating-point number)。基本特征 当用不同的电脑计算圆周率时,会发现一台电脑的计算较...
浮点数之所以能表示很大或很小的数,是因为使用了
设有两个浮点数x和y,它们分别为:x = Mx*2^Ex y = My*2^Ey 其中Ex和Ey分别为数x和y的阶码,Mx和My为数x和y的尾数。两浮点数进行加法和减法的运算规则是:设 Ex小于等于Ey,则 x±y = (Mx*2^(Ex-Ey)±My)*2^Ey。完成浮点加减运算的操作过程大体分为四步:1. 0 操作数的检查...
浮点运算是什么?
在浮点运算中,数值的表示通常采用科学记数法。这意味着一个数可以被写成基数的指数形式。例如,一个浮点数可以被表示为形如m x 10^n的形式,其中m和n都是精确的小数或整数。计算机在进行浮点运算时,会根据这种表示法进行相应的计算和处理。浮点数的表示和处理方式对于保证运算的精度和效率至关重要。
浮点取整是用整数部分还是小数部分?
在C语言中,取浮点数的小数部分也有多种方法。一种方法是使用浮点数减去整数部分,得到小数部分。另一种方法是使用取模运算符(%),将浮点数转换成整数类型,并对取模运算符右边的数取绝对值,然后将结果转换回浮点数。需要注意的是,浮点数的精度问题可能会影响到这两个操作的结果。在进行浮点数运算...
到底浮点运算是什么
此外,浮点运算的计算复杂度相对较高,可能需要进行复杂的舍入和截断操作以确保计算的准确性和效率。尽管如此,随着计算机技术的发展,浮点运算的性能和精度不断提高,使得它在各种应用中发挥着重要作用。总结来说,浮点运算是计算机处理带有小数点的数值的一种计算方式,涉及到加、减、乘、除等基本运算以及...
浮点数是怎样存入内存的?
MOV R1,#45H ;将 45H 存入寄存器 R1 MOV R2,#64H ;将 64H 存入寄存器 R2 FADD R3,R1,R2 ;R1 和 R2 相加,结果存入 R3 FDiv R4,R3,#2.0 ;R3 除以 2.0,结果存入 R4 STR R4,[R5] ;将 R4 的值存入指定的内存地址 这种操作需要支持浮点运算的汇编语言,并且需要编译器支持浮点指令...