最近在偶然学习了浮点数的加减法,记录一下



浮点数的定义 

浮点数将一个数的范围和精度分开记录的一种数据格式,目的是为了扩大数据的范围。计算机里面的数据记录都是二进制的,浮点数的相当于是将二进制的数的小数点移来移去。数据范围就是记录小数点位置的,

一般的格式是:

浮点数的加减法

按IEEE754记录的标准,浮点数有32位浮点数和64位浮点数。好像是一个是称为单精度,一个称为双精度

浮点数的加减法

浮点数的加减法

第一个S表示的是数据的正负值,是符号位。

E表示的精度位,M是尾数位,表示的是数据的精度。

IEEE74的尾数形式是1.XXXXXX其中的M部分是只保存XXXX部分,1实际上是不参与保存的。目的是为了保留更多的有效为,提高精度。

精度位E一般会是以偏指数的方式保存。也就是8位精度位会加上127 ,10位的精度位E会加上1023目的是防止有负数

举个例子:

浮点数的加减法


浮点数的加减法

 浮点数的加减法的步骤主要是分成这么几部分

(1)对阶 :找出两个浮点数阶数大的那个

(2)尾数相加:对阶后,将阶数小的那个数调整为和阶数大相同,将调整后的尾数进行想加减

(3)规格化:尾数相加减之后的格式是不固定的,为了确定浮点数的表示方式是唯一的,这里规定了浮点数规格化,确保生成的浮点数格式是一样的

        规格化的说明:

      浮点数的加减法浮点数的加减法

(4)舍入:规格化的时候,通常会对尾数进行左移或者算术右移,这样的话尾数的最后部分就会有舍入的问题。

(5)溢出处理:规格化的时候尾数的左右移动时,为了确保浮点数的大小不变,需要对精度位也进行右左移动,为了确保数据的大小不变,但是有时候这样会溢出,需要对溢出进行处理

 

主要的公式如图:

浮点数的加减法

浮点数的加减法

 

从这个过程可以看出,浮点数本身由于存储尾数的限制长度限制,在进行加减的时候,如果两个数的阶数相差太大,会有可能把低阶数的数据淹没掉。造成数据的丢失。

 

相关文章: