1. 两种基本浮点格式:单精度和双精度。IEEE单精度格式具有24位有效数字,并总共占用32 位。IEEE双精度格式具有53位有效数字精度,并总共占用64位
  2. 两种扩展浮点格式:单精度扩展和双精度扩展。此标准并未规定扩展格式的精度和大小,但它指定了最小精度和大小。例如,IEEE 双精度扩展格式必须至少具有64位有效数字,并总共占用至少79 位
  3. 浮点运算的准确度要求:加、减、乘、除、平方根、余数、将浮点格式的数舍入为整数值、在不同浮点格式之间转换、在浮点和整数格式之间转换以及比较。求余和比较运算必须精确无误。其他的每种运算必须向其目标提供精确的结果,除非没有此类结果,或者该结果不满足目标格式。对于后一种情况,运算必须按照下面介绍的规定舍入模式的规则对精确结果进行最低限度的修改,并将经过此类修改的结果提供给运算的目标
  4. 在十进制字符串和两种基本浮点格式之一的二进制浮点数之间进行转换的准确度、单一性和一致性要求。对于在指定范围内的操作数,这些转换必须生成精确的结果(如果可能的话),或者按照规定舍入模式的规则,对此类精确结果进行最低限度的修改。对于不在指定范围内的操作数,这些转换生成的结果与精确结果之间的差值不得超过取决于舍入模式的指定误差
  5. 五种类型的IEEE 浮点异常,以及用于向用户指示发生这些类型异常的条件。五种类型的浮点异常是:无效运算、被零除、上溢、下溢和不精确
  6. 四种舍入方向:向最接近的可表示的值;当有两个最接近的可表示的值时首选“偶数”值;向负无穷大(向下);向正无穷大(向上)以及向0(截断)

在计算机中,浮点数一般由三部分组成:数值的符号位、阶码和尾数。

即:浮点数=符号位.尾数×基数(底)阶码

该标准规定基数为2(浮点数=符号位.尾数×2阶码。) ,阶码E用移码(非标准移码,标准移码与补码的符号位相反,而非标准移码要再减一)[1] 表示,尾数M用原码表示,根据二进制的规格化方法,数值的最高位总是1,该标准将这个1缺省存储,使得尾数表示范围比实际存储的多一位。按IEEE754标准,常用的浮点数的格式如下图所示:

IEEE754标准中有三种形式的浮点数:短浮点数(又称单精度浮点数)、长浮点数(又称双精度浮点数)、临时浮点数(又称扩展精度浮点数,这种浮点数没有隐含位),它们的具体格式如下表:

对于阶码为0或255的情况,IEEE754标准有特别的规定:

如果 E 是0 并且 M 是0,则这个数的真值为±0(正负号和数符位有关)

如果 E = 255 并且 M 是0,则这个数的真值为±∞(同样和符号位有关)

如果 E = 255 并且 M 不是0,则这不是一个数(NaN)。

  • 根据IEEE 754标准,符号位也是“0”代表正数;“1”代表负数.

  • 阶码用移码表示,尾数规格化形式,但格式如下:1.XXX…X。由于最高位总是1,因此省略,称隐藏位(临时实数则不隐藏).隐含的“1”是一位整数(即权位为 )。在浮点格式中表示出来的23位尾数是纯小数,用原码表示。例如: (15)10 =(1111)2 ,将它规格化后结果为1.111×23 ,其中整数部分的“1”将不存储在23位尾数内。

  • 尾数比规格化表示大一倍(因为省去整数部分的“1”),而阶码部分则比一般小1,即[E]移=2n+E-1=127+E

  • 这样,尾数与通常意义的尾数的含义不一致,为了区别,754 中的尾数称为有效数.

IEEE754对阶码作如下规定:

对上溢和下溢的处理:

  当运算结果小于规格化浮点数所能表示的最小值时,以前硬件处理策略,或者结果置0或者产生一个下溢陷阱,这两种方案均不能令人满意。 IEEE754处理方法是使用非规格化数。这时阶码为0(即移码-127),尾数没有隐含位,最高位是0。 这样的结果是降低精度,扩大表示范围。

  如原来规格化单精度最小值是1.0x2-126,而非规格化单精度最小值是2-23 x2-126=2-149(只有1位有效位)

  对上溢用无穷大表示,同时规定:

    无穷大+任何数=无穷大

    任何有限数÷0=无穷大

    任何有限数÷无穷大=0

    无穷大÷无穷大=NaN

    NaN(Not A Number)

几个特殊数据的存储规则:

    正0: 所有的数据位都是0;

    负0: 最高位为1,其它的数据位是0;

    正/负无穷: 符号位为0/1,阶码位全为1,有效数字全为0;

    NAN: 非法的浮点数,阶码位全为1,有效数字不全为0;

这样IEEE754有5种类型浮点数据,如下表:

    

十进制数转换成浮点数的步骤:

  1. 将十进制数转换成二进制数:整数部分用2来除,小数部分用2来乘;

  2. 规格化二进制数:改变阶码,使小数点前面仅有第一位有效数字;

  3. 计算阶码:   短型浮点数的阶码加上偏移量7FH   长型浮点数的阶码加上偏移量3FFH   扩展型浮点数的阶码加上偏移量3FFFH

  4. 以浮点数据格式存储。   把数值的符号位、阶码和尾数合在一起就得到了该数的浮点存储形式

浮点数转换成十进制数的步骤:

该步骤与前面“十进制数转换成浮点数”的步骤是互逆的,其具体步骤如下:

  1. 分割数字的符号、阶码和有效数字;

  2. 将偏移阶码减去偏移,得到真正的阶码;

  3. 把数字写成规格化的二进制数形式;

  4. 把规格化的二进制数改变成非规格化的二进制数;

  5. 把非规格化的二进制数转换成十进制数。

  

  

  

  对于不同长度的浮点数,阶码与小数位分配的数量不一样,如下:

  

  对于32位的单精度浮点数,数符分配是1位,阶码分配了8位,尾数分配了是23位。

  

IEEE754标准浮点格式的更多相关文章

  1. 【转】浮点格式IEEE754详解

    原文网址:http://www.cnblogs.com/zjujunge/archive/2012/09/13/2682613.html Intel聘请了最好的数值分析家来为8087FPU设计浮点数格 ...

  2. 第二章 运算方法与运算器(浮点数的加减法,IEEE754标准32/64浮点规格化数)

    这一章,主要介绍了好多种计算方法.下面,写一点自己对于有些计算(手写计算过程)的见解. 1.原码.反码.补码 原码:相信大家都会写,符号位在前二进制数值在后,凑够位数即可. 反码:原码符号位不变,其他 ...

  3. 十进制浮点数转换成IEEE754标准的32浮点数的二进制格式

    参考: http://jimmygod.blog.163.com/blog/static/43511339200792605627411/ http://blog.csdn.net/archersab ...

  4. C#中浮点数依IEEE-754标准转二进制串 (MODBUS 浮点数转换)

    因工作需要,把再串口通信中浮点数与字节流的数据转换函数放在这,转发的,谢谢原作者. 今天花了一天的时间搜罗资料,为了解决一个串口编程的进制转化问题.因为串口传送的浮点数据格式与IEEE-754标准(3 ...

  5. 【转载】JS Number类型数字位数及IEEE754标准

    JS的基础类型Number,遵循 IEEE 754 规范,采用双精度存储(double precision),占用 64 bit.如图 意义 1位用来表示符号位 11位用来表示指数 52位表示尾数 浮 ...

  6. JS Number类型数字位数及IEEE754标准

    JS的基础类型Number,遵循 IEEE 754 规范,采用双精度存储(double precision),占用 64 bit.如图 意义 1位用来表示符号位 11位用来表示指数 52位表示尾数 浮 ...

  7. IEEE754标准浮点数表示与舍入

    原文地址:https://blog.fanscore.cn/p/26/ 友情提示:本文排版不太好,但内容简单,请耐心观看,总会搞懂的. 1. 定点数 对于一个无符号二进制小数,例如101.111,如果 ...

  8. IEEE754标准

    以下计算按规格化规定: S:符号位 M:分数值 E:指数偏移值 单精度浮点数(32bit): NUM_single = (-1)^S *  1.M   *   2^(E-127) 双精度浮点数(64b ...

  9. 将四个BYTE数值转换成IEEE754标准的浮点数(两种方法:用Addr函数取字节数字的首地址,或者用Absolute关键字)

    在工作中,经常使用到IEEE754格式的数据.IEEE754格式的数据占四个字节,好像Motorola格式和Intel格式的还不一样. 由于工作中很少和他打交道(使用的软件内部已经处理),就没太在意. ...

随机推荐

  1. Java实现斐波那契数列的多种方法

    小编综合了很多算法相关的书籍以及其他,总结了几种求斐波那契数列的方法 PS:其中的第83行的递归法是求斐波那契数列的经典方法 public class 斐波那契数列 { //迭代法 public st ...

  2. Android如何使用OKHttp

    首先要在build.gradle里面写入 // 添加OKHttp支持 implementation("com.squareup.okhttp3:okhttp:4.3.1") 下面是 ...

  3. Java实现 洛谷 P1115 最大子段和

    import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scann ...

  4. Maven发布Release到中心仓库历程记录(无个人域名)

    Maven发布Release到中心仓库历程记录(无个人域名) 前言 因为前段时间自己做了一个爬虫项目(地址),自己很希望分享到maven中心仓库上,感觉拥有自己的jar包令我兴奋,便开始了maven发 ...

  5. 【asp.net core 系列】6 实战之 一个项目的完整结构

    0. 前言 在<asp.net core 系列>之前的几篇文章中,我们简单了解了路由.控制器以及视图的关系以及静态资源的引入,让我们对于asp.net core mvc项目有了基本的认识. ...

  6. 【asp.net core 系列】8 实战之 利用 EF Core 完成数据操作层的实现

    0. 前言 通过前两篇,我们创建了一个项目,并规定了一个基本的数据层访问接口.这一篇,我们将以EF Core为例演示一下数据层访问接口如何实现,以及实现中需要注意的地方. 1. 添加EF Core 先 ...

  7. Javascript模块化编程(转自阮一峰的网络日志)(备忘)

    http://www.ruanyifeng.com/blog/2012/10/javascript_module.html

  8. 基于移动最小二乘法的点云曲面拟合(python)

    1.移动最小二乘法介绍 为了更好地对数据量大且形状复杂的离散数据进行拟合,曾清红等人[1]开发出一种新的算法——移动最小二乘法.这种新的最小二乘算法为点云数据的处理提供了新的方法.使用点云数据拟合曲面 ...

  9. Charles抓包2-Charles抓包https请求

    目录 1.开启SSL代理 2.安装证书 3.导出证书 4.浏览器安装证书 1.开启SSL代理 菜单,代理-->SSL代理设置 勾选启用SSL代理 在包括选项,添加主机:*,端口:443 确定保存 ...

  10. os模块查看系统数据

    >>> import os >>> os.name # 操作系统类型 'posix' 如果是posix,说明系统是Linux.Unix或Mac OS X,如果是nt ...