$ IEEE二进制浮点数算术标准

$ 简介

IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。

IEEE 754规定了四种表示浮点数值的方式:

  • 单精度(32位)
  • 双精度(64位)
  • 延伸单精度(43比特以上,很少使用)
  • 延伸双精度(79比特以上,通常以80位实现)

$ 标准描述

一个浮点数的实际值可以表示成下面的类似科学计数法的形式:

V = s × m × 2e

  • s表示符号位
  • m表示有效数字,1≤m<2
  • 2e表示指数部分

IEEE 754标准的二进制编码表示格式:

V = (-1)S× 2E-X × (1+M)

  • S:符号位,当S=0时,值为正数;当S=1时,值为负数
  • E:指数偏移值,即浮点数表示法中指数域的编码值,等于指数的实际值加上固定值2e-1-1,e为存储指数的位元的长度。
  • M:有效数字的小数部分

IEEE 754规定,对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M。

ieee32

对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M。

ieee64

规约形式的浮点数

如果浮点数中指数部分的编码值在0 < exponent ≤ 2e-2之间,且在科学表示法的表示方式下,分数部分最高有效位是1,那么这个浮点数将被称为规约形式的浮点数。“规约”是指用唯一确定的浮点形式去表示一个值。

非规约形式的浮点数

如果浮点数的指数部分的编码值是0,分数部分非零,那么这个浮点数将被称为非规约形式的浮点数。一般是某个数字相当接近零时才会使用非规约形式来表示。IEEE 754标准规定:非规约形式的浮点数的指数偏移值比规约形式的浮点数的指数偏移值小1。

特殊值

这里有三个特殊值需要指出:

  1. 如果指数是0并且尾数的小数部分是0,这个数±0(和符号位相关)
  2. 如果指数 =2e-1并且尾数的小数部分是0,这个数是±∞(同样和符号位相关)
  3. 如果指数 =2e-1并且尾数的小数部分非0,这个数表示为不是一个数(NaN)

$ 问题

指数为什么要加上偏移值?

将真值映射到正数域的数值(真值在数轴上正向平移一个偏移量),称为移码。使用移码来比较两个真值的大小比较简单,只要高位对齐后逐位比较即可,不用考虑符号位问题。

为什么偏移值为2e-1-1而不是2e-1 ?

8位二进制有符号数的取值范围是[-128,127],也是32位浮点数指数可能表示的最大取值范围。

8位二进制无符号数的取值范围是[0,255],也是32位浮点数阶码可能表示的最大取值范围。

要使指数为非负数,[-128,127]需要加上偏移值128,得到阶码是[0,255]。

IEEE 754规定阶码0和255为特殊值。

那么,阶码实际能表示的范围是[1,254]。如果偏移值仍为128,那么指数范围变成[-127,126]。

为了让浮点数能够表示更大的取值范围,将指数范围加上1得到范围[-126,127],对应偏移值减去1得到127.

$ 参考

更新时间: 10/29/2019, 7:30:02 AM