【计算机组成原理】浮点数表示与运算

什么是浮点数

        浮点数是一种在计算机中表示实数的方式,起因在于定点数无法有效表示非常大或非常小的数(如 3.1415、0.0000001 或 1e+20),这在科学计算、图形处理、工程建模等领域中是常见需求。为此,引入了浮点数,它通过科学计数法的思想,用符号位、阶码和尾数的组合表示实数。

        通常,浮点数表示为:

N=(-1)^S\times M\times R^E

        式中式中,S取值0或1,用来决定浮点数的符号;M是一个二进制定点小数,称为尾数,一般用定点原码(无符号)小数表示;E是一个二进制定点整数,称为阶码或指数,用移码表示。R是基数(隐含),可以约定为2、4、16等。可见浮点数由符号、尾数和阶码三部分组成。

IEEE754标准规定

        在IEEE754标准中,浮点数的格式如下:

     

        (图源王道)

        其中尾数用无符号原码表示,阶码用偏置值127或1023的移码表示。

规格化浮点数
        尾数规格化

        首先,对于尾数的规格化,要求隐含一位有效位,不能够浪费尾数的精度。

        对于IEEE754,要求小数点前隐含有效位1。例如,尾数表示为0111001实际真值为1.0111001。

        对于用补码表示的尾数,要求其转换为原码后的尾数小数点后第一位为1。例如:1.11000,转换为原码后为1.01000,其中1.01000的第一个1表示符号,此时小数点后第一个有效位为0,浪费了一位尾数精度,应该进行左规变成1.10000,同时阶码-1。

        对于用基为4的原码表示的尾数,要求其小数点后两位不能同时为0。因为基为4的尾数进行左规时,尾数应移动两位。

        阶码规格化

        对于IEEE754,要求阶码不能全为0或者全为1。、

        所以对于float型,即32位浮点数,其阶码的范围为0到2^{8}-1=255扣去一个最小值和最大值,即1-254,对应真值为1-127到254-127,即-126到127

        对于double型,即64位浮点数,其阶码的范围为1到2046,对应真值为-1022到1023

        规格化浮点数的表示范围

        显然:

        1、对于单精度浮点数

        MAX:阶码=11111110=254,尾数=全1=2-2^{-23},最大真值=(2-2^-23)*2^127。

        MIN:阶码=00000001=1,尾数=全0,最小真值=1*2^-126。

        由于负数与正数在数轴上关于原点对称,所以可以得到规格化单精度浮点数的表示范围为:

        

        2、双精度浮点数也适用类似的计算方法。

非规格化浮点数

        非规格化浮点数表示表格如下:

浮点数加减法

        浮点数加减运算的步骤如下:

        1、对阶:小阶看大阶,即把阶码小的尾数进行右移。

        2、尾数相加减:如题。

        3、规格化:进行左规或者右规,使尾数符合规格化条件(不浪费尾数精度)。

        4、舍入:0舍1入。

        5、溢出判断:看阶码是否超出范围(上下溢出)。

        PS:如果发生了上下溢出,上溢机器视为正负无穷,下溢视为机器0。若开启异常监测,则报错。

类型转换问题

        程序运行中,强转、赋值、计算过程都可能带来类型转换,从【计算机组成原理】C语言中数据类型表示及转换总结中可以知道,从短型转长型过程中不会出现任何损失,即char-short-int-long;float-doule。

       首先需要记住int为32位,float尾数为23位,double尾数为52位。其他一些特殊情况列举如下:

        1、int-float

        首先int有32位,float尾数只有23位,所以int转float时很容易发生精度损失。

        2、double-float或int

        首先尾数位数得知很有可能发生精度损失;其次double表示范围远大于float和int,会发生溢出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值