what-is-computer-03

计算机进行小数处理的机制

用二进制数表示小数

把二进制数 1011.0011 转换成十进制数

计算机进行小数运算时会出错

有一些十进制数的小数无法转换成二级制数,比如循环小数。

编程语言提供两种表示小数的数据类型:双精度浮点数类型-double(64位)、单精度浮点数类型-float(32位)。

  • 浮点数,用符号、尾数、基数和指数这四部分来表示的小数。
  • 计算机内部使用的是二进制数,所以基数为 2。
  • 64位和32位的数据,会被分为3部分来使用。

  • 数值的大小用尾数部分和指数部分来表示。
  • 小数用“尾数部分*2的指数部分次幂”的形式来表示。

符号部分,指使用一个数据来表示数值的符号。

  • 该数据位是1时表示负,为0时则表示“正或者0”。

尾数部分,将小数点前面的值固定为1的正则表达式

  • 尾数部分使用正则表达式,将表现形式多样的浮点数统一为一种表现形式。

  • 将二进制数表示的小数左移或右移(逻辑移位)数次后,整数部分的第1位变为1,第2位之后都变为0(这样是为了消除第2位以上的数位)。
  • 第1位的1在实际数据中不保存。省略该部分后就节省了一个数据位,可表示更多的数据范围。
  • 单精度浮点数中,尾数部分是23位,但可表示24位的数值。
  • 双精度浮点数中,尾数部分是52位,但可表示53位的数值。

指数部分,EXCESS系统表现

  • 为了表示负数时不使用符号位。
  • EXCESS系统表现,通过将指数部分表示范围的中间值设为0,使得负数不需要用符号来表示。

在实际的程序中进行确认


  • 十进制数0.75,用单精度浮点数表示为:

    0-01111110-100000000000000000000000

  • 破折号用来区分符号部分、指数部分、尾数部分。

  • 0,表示正数;
  • 01111110,是十进制数126,用EXCESS系统表现就是-1;
  • 尾数部分的二进制数转换成十进制数,为:

    (12的0次幂)+(12的-1次幂)=1.5

  • 这个单精度浮点数,表示为:“ +1.52的-1次幂 ”。即为“ +1.50.5= +0.75 ”