漫谈计算机组成原理(十)浮点数及浮点数的运算
本文讲什么?
浮点数和定点数一样,都是计算机中数据的存储形式。定点数我们可以理解成纯小数或者纯整数,但是实际上在计算机中参与运算的数字并非都是定点数。比如,有些数据过大,比如2^100^这样的数据,如果写成二进制的形式,寄存器肯定是无法放下的。于是就有了浮点数这种数据。
本文主要讲述浮点数的概念、浮点数的规格化,以及浮点数的各种运算。
浮点数
所谓浮点数,就是小数点的位置会改变的数字。什么情况下小数点会发生改变呢?比如下面这样:
1 | 22.101 = 0.22101 * 10^2 = 0.022101 * 10^3(注意,此处的数据都是十进制的) |
上面的22.101的小数点的位置之所以会发生变化,究其原因不过是乘以了10的对应次方。根据我们以前学过的内容,10同样可以换成其他的数字,比如2,相应的幂次也会发生变化。我们称这个10或者2为基数,基数的幂次为阶码;而小数点不断变化的数称作尾数。再看一个数字:
1 | 11.0101(2) = 0.110101*2^10 = 0.0110101*2^11(格式:【尾数符号|尾数|阶码符号|阶码】) |
注意啊,上面的数字全部都是二进制的,包括基数和阶码。一开始我看这个数字是懵逼的,因为我就是搞不明白为啥0.1101012^3^ = 0.1101012^11^,后来才明白,原来11是3的二进制形式,这块千万要看好,我就被坑了。
浮点数在计算机中的表现形式:和上面我给出的格式略有不同,因为上面的那种形式是我用来给大家解释说明的。而下面这种格式才是真正存储在计算机中的格式。
浮点数的表示范围:就像我们之前说过的定点数,同样有其表示的范围,浮点数也是一样,同样有表示范围,如果一个数字超过了这个表示范围,则称为溢出。表示范围如下图:
浮点数有上溢区和下溢区之分,当浮点数的阶码大于最大阶码时,称为上溢,此时机器停止运算,进行溢出中断处理;如果阶码小于最小的阶码时,称为下溢, 此时溢出的数值非常小,直接强制将浮点数的尾数置为0,可以继续执行运算。
浮点数的规格化:其实浮点数的规格化没什么好说的,基本上是和我们当年学的科学计数法是一个样子的。我们就说一下基数为2的规格化方式:基数为2时,尾数最高为1的数规格化数。规格化时,尾数左移一位,阶码减1;尾数右移一位,阶码加1。当尾数小于等于1的时候,规格化就完成了。
我们来看看如何将一个数规格化成浮点数(包括其原码、反码、补码):
- 例子:设浮点数字长为16位,其中阶码5位,尾数11位,令x=-54,请将其规格化为基数为2的浮点数
1)先将-54转换为二进制形式:-110110
2)规格化得到-(0.1101100000)* 2^110^
3)得到在浮点机中的结果:[x]原= 0.0110;1.1101100000,[x]补=0.0110;1.0010100000,[x]反=0.0110;1.0010011111.
浮点数的运算
从上面的介绍中能够知道,在计算机中,浮点数都能够表示成** 尾数(乘)基数 ^阶码^**的这种形式,这就给浮点数的四则运算带来了巨大的便利。
浮点数的加减法运算
浮点数的加法非常简单,只需要记住下面的这几个步骤就能够准确的运算:
1 | 1)对阶,使得两数的小数点位置对齐。 |
因为浮点数的加法比较简单,我们就不给出具体的例子了,我只是强调几点。
- 所谓的对阶,就是对阶码进行运算。我们让两个阶码做减法,判断哪个阶码更大,谁大就向谁看齐。同时,两个阶码差几就让对应的尾数向左或者向右移动几位,使得阶码之间的差值为0.
- 尾数求和就是两个尾数相加,这个没什么好说的,按照定点的运算就可以了。
- 尾数计算完毕后,需要规格化。
因为在上面我们讲了浮点数的表示范围,当基数为2的时候,规格化数s的绝对值应该属于[1/2,1)之间,所以当s<0的时候,补码规格化形式为00.1xxxxx,而s>0的时候,补码规格化形式为11.0xxxx。 所以,尾数的最高数值位和符号位不同的时候,就存在两种可能的情况。
这就导致当规格化数小于0的时候,规格化有两种方式。
浮点数的乘除法运算
浮点数的乘除法运算其实也是基于加减运算的。
运算步骤如下:
1 | 1)阶码相加减:按照定点整数的加减法运算方法对两个浮点数的阶码进行加减运算。 |
例子像下面这样:
- 例子:设两浮点数x=2-001×(-0.100010),y=2-100×(0.010110),求x*y
[x]浮=11111,1.011110 [y]浮=11100,0.010110
1 | 1)阶码相加 |
结束语
至此,计算机运算方法这一章节就算是完成了,大家如果有问题可以私信、留言。
如果你喜欢我的文章,欢迎关注我的微信公众号:最高权限比特流
参考:
《计算机组成原理》唐朔飞
博客:https://blog.csdn.net/xingqingly/article/details/18981671