美文网首页CSAPP_3e
IEEE浮点数表示法

IEEE浮点数表示法

作者: 橡树人 | 来源:发表于2020-06-28 07:45 被阅读0次

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来表示;

相关文章

  • 理解C语言浮点数的存储

    IEEE-754标准 目前世界上使用最为广泛的小数表示方法是浮点数表示法,而浮点数通用的算术标准是IEEE-754...

  • Java 中 float 类型的内存结构分析

    前言 本文按照以下顺序讲解: 浮点数 IEEE 754定义的浮点数表示法 float 的最大值分析 题目分析 浮点...

  • IEEE浮点数表示法

    IEEE浮点数标准将数表示成形式: 符号数:决定了数是负的()还是正的(),其中把数值的符号位解释当做是一种特殊情...

  • PHP浮点数精度问题

    PHP常见的浮点数“bug” 浮点数的表示形式 浮点数的表示(IEEE 754): 浮点数, 以64位的长度(双精...

  • 浮点数定点数

    基础知识 浮点数和定点数都是对于存在小数部分的数字一种表示方法 浮点数和定点数表示法的区别?根据国际标准IEEE ...

  • IEEE-754浮点数表示法

    几乎所有现代编程语言都采用这种二进制浮点表示法。如 JavaScript 但事实上,二进制浮点数表示法并不能精确地...

  • IEEE浮点数表示

    该文主要介绍一个浮点数在计算机中的表示,属于很底层的知识点 介绍计算机如何表示浮点数之前,先了解一下日常生活中,我...

  • IEEE浮点数表示

    IEEE标准中浮点数用形如V=(-1)^s x M x 2^E的格式表示一个小数:s☞符号位,s=1代表负数,s=...

  • 深入浅出iOS浮点数精度问题 (上)

    目录 一,浮点数精度丢失? 二,整数的二进制表示 三,浮点数的二进制表示 四,iEEE 754浮点数的手动转换 五...

  • 该死的IEEE-754浮点数,说「约」就「约」,你的底线呢?以J

    IEEE 754 表示:你尽管抓狂、骂娘,但你能完全避开我,算我输。 一、IEEE-754浮点数捅出的那些娄子 首...

网友评论

    本文标题:IEEE浮点数表示法

    本文链接:https://www.haomeiwen.com/subject/kixifktx.html