IEEE浮点数表示法

IEEE浮点数标准将数表示成形式V=(-1)^s\times M\times 2^E

  • 符号数s:决定了数是负的(s=1)还是正的(s=0),其中把数值0的符号位解释当做是一种特殊情形。
  • 有效数M:一个二进制分数,范围要么是在12-\epsilon之间,要么是在01-\epsilon之间。
  • 指数E:用2的幂次方对数值加权。

浮点数的位表示分成3个字段对符号数s、有效数M、指数E进行编码:

  • 1位的符号字段s对符号数s进行编码。
  • k位的指数字段exp=e_{k-1}...e_1e_0对指数E进行编码;
  • n位的分数字段frac=f_{n-1}...f_1f_0对有效数M进行编码,但是编码后的frac值取决于指数字段exp是否等于0

图2.32展示了如何将这3个字段打包成两种最常见格式的字。


标准的浮点数格式.png
  • 在单精度浮点数格式(C语言中的float)里,字长为32位:1位表示符号字段s8位表示指数字段exp23位表示分数字段frac
  • 在双精度浮点数格式(C语言中的double)里,字长为64位:1位表示符号字段s11位表示指数字段exp52位表示分数字段frac

对于单精度浮点数,根据指数字段exp的值,一个给定二进制表示的数值可分成3种不同的情况:

情形1:可归一化数

特征

指数字段exp既不全是0,也不全是1;
指数值E=exp-Bias
M=1+f

解释:

  • 单精度情形下,指数字段exp的无符号数范围是1到254,双精度情形下,指数字段exp的无符号数范围是1到2046;
  • 解释指数E为一个用偏移形式表示的有符号数,即指数值E=exp-Bias,其中exp是位模式为e_{k-1}...e_1e_0的无符号数,Bias=2^{k-1}-1(单精度情形数值为127=2^{8-1}-1,双精度情形数值为1023=2^{11-1}-1)。据此可得出:单精度情形下指数值E的数值范围是-126127,双精度情形下指数值E的数值范围是-10221023
  • 解释有效数M为一个二进制表示为1.f_{n-1}...f_1f_0的数,等价于有效数M=1+f,这叫做隐式1开头表示。这样能多表示1位精度,因为通常会调整指数E使得有效数M满足1\leq M<2,且开头的位一直等于1,不需要显式地表示。用字段frac来表示分数值f,其中0\leq f<1,对应的二进制表示为0.f_{n-1}\cdots f_1f_0

情形2:不可归一化数

特征:

指数字段exp全是0
指数值E=1-Bias
有效数M=f;

解释:

  • 有效数M=f,表示分数字段frac没有隐式的开头1;

为什么要提供不可归一化数?

  1. 不可归一化数提供了一种表示0的方法
    由于可归一化数对应的有效数M\geq 1,所以不能用可归一化数来表示0
  2. 为了表示非常接近0的数。
    不可归一化数可提供熟知的渐近下溢性质:所有可能的数值在0.0附近呈均匀分布。

如何表示+0.0

  • 符号位s是0,即符号数s=0
  • 指数字段exp全是0,即指数E=1-Bias=1-127=-126
  • 分数字段frac全是0,即有效数M=f=0
  • +0.0=(-1)^s\times M\times 2^E=(-1)^0\times 0\times 2^{-126}

如何表示-0.0

  • 符号位s是1,即符号数s=1
  • 指数字段exp全是0,即指数E=1-Bias=1-127=-126
  • 分数字段frac全是0,即有效数M=f=0
  • +0.0=(-1)^s\times M\times 2^E=(-1)^1\times 0\times 2^{-126}

注意:

  • 使用IEEE浮点数标准,数值+0.0-0.0在有些情形里当做是一样的,有些情形里当做是不一样的。

情形3:特殊值

特征:

指数字段exp全是1;

如何表示+\infty

  • 指数字段exp全是1;
  • 分数字段frac全是0;
  • 符号位s是0,即符号数s=0

如何表示-\infty

  • 指数字段exp全是1;
  • 分数字段frac全是0;
  • 符号位s是1,即符号数s=1

如何表示NaN

  • 指数字段exp全是1;
  • 分数字段frac不等于0

两个惯用法:

  • 当乘以两个非常大数,或者除以0时,使用无穷大来表示运算结果;
  • 当运算结果不能用实数或者无穷大来表示时,就使用NaN来表示;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。