计算机中的定点数与浮点数

一、背景说明

计算机不仅需要存储整数,还需要存储小数。由于计算机中并没有专门的部件对小数中的小数点进行存储和处理,所有需要一种规范,使用二进制数据表示小数。

这种规范分两种:

  1. 定点数表示方式
  2. 浮点数表示方式

注意:定点数并不是仅仅只能表示整数,定点数也可以表示小数。 浮点数同样可以表示小数和整数;定点数和浮点数只是计算机表示数据的两种不同方式而已。

二、定点数

定点数的意思是:小数点的位置在计算机的存储是约定好的,固定的。一个小数的整数部分和小数部分分别转化为二进制的表示。

例如:十进制的 25.125

  • 整数部分:25使用二进制表示为:11001
  • 小数部分:0.125使用二进制表示为:.001
  • 所以合起来使用11001.001 表示十进制的25.125

所以在一个8位的计算机中,前5位表示一个小数的整数部分,后3位表示小数部分,小数点默认是第五位后的位置(实际上计算机不会存储小数点,只是大家这么约定)。

使用11001001表示十进制的25.125。看起来很完美,也很容易理解,但是这么表示没有其他问题吗?

问题:

问题在于:一个8位的计算机,整数部分111111十进制最大只能表示为31 ;小数部分0.111 最大只能表示0.875,

表示的数据范围太小了。当然在16位的计算机中,可以通过增大整数部分位数表示更大的数,增大小数部分的位数可以提高小数精度。但是这种方式对计算机来说开销非常大,所以大多数计算机并没有选择使用定点数表示小数,而是采用浮点数表示小数。

三、浮点数

计算机中使用浮点数表示小数类似于以前数学中用科学计数法表示较大的数。

例如:352.47 = 3.5247 * 10的2次方

178.125转化为二进制为 10110010.001,又可表示为:1.0110010001 乘以 2的111次方(111是7的二进制表示)

  • 10110010001 这部分被称作尾数(M)
  • 111这部分被称作阶码(P)
  • 正负被称作数符(S): 0表示正数 , 1表示负数。

那么一个浮点数可以使用三部分表示:数符(S),阶码(P),尾数(M)。

根据IEEE754标准,64位计算机的长实数浮点表示。


178.125在计算机中使用浮点数表示为:

四、浮点数与定点数的比较

  • 当相同位数的计算机表示数据(比如64位),浮点数能表示的数据范围远远大于定点数表示的数据范围。
  • 当相同位数的计算机表示数据(比如64位),浮点数的相对精度比定点数要高。
  • 浮点数在计算时,要分阶码部分的计算和尾数部分的计算,而且运算结果要求规格化,故浮点运算步骤比定点数运算步骤多,运算速度比定点运算速度低。
  • 目前大多数计算机使用浮点数表示小数。

发布于 2021-09-13 22:49