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实现 蓝桥杯VIP 算法提高 change

    算法提高 change 时间限制:1.0s 内存限制:256.0MB 问题描述 数组A中共有n个元素,初始全为0.你可以对数组进行两种操作:1.将数组中的一个元素加1:2.将数组中所有元素乘2.求将数 ...

  2. java实现第三届蓝桥杯DNA对比

    DNA对比 脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子.它由4种主要的脱氧核苷酸(dAMP.dGMP.dCMT和dTMP)通过磷酸二酯键连接而成.这4种核苷酸可以分别记为:A.G.C. ...

  3. 汇编指令mov、add、sub、jmp

    mov:寄存器,数据 mov:寄存器,寄存器 mov:寄存器,内存单元 mov:段寄存器,内存单元 mov:内存单元,寄存器 mov:内存单元,段寄存器 mov:段寄存器,寄存器 mov:寄存器,段寄 ...

  4. 有关指针 -> 和* 的重载

    1, #include<iostream> #include<string> using namespace std; class test{ int i; public: t ...

  5. 防止暴力破解-DenyHosts应用

    当你的linux服务器暴露在互联网之中,该服务器将会遭到互联网上的扫描软件进行扫描,并试图猜测SSH登录口令.   你会发现,每天会有多条SSH登录失败纪录.那些扫描工具将对你的服务器构成威胁,你必须 ...

  6. 【Java入门】JDK安装和环境变量配置(Win7版)

    系统环境:Windows7 x64 安装JDK和JRE版本:1.8.0_191 1.下载JDK安装包 Oracle官网下载网址:https://www.oracle.com/technetwork/j ...

  7. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(七)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  8. VS Code WebApi系列——3、发布

    上两篇已经实现了WebApi及基于jwt的Token设置,那么功能做完了,该发布WebApi了.为什么要对发布进行一下说明呢,因为是基于vscode和.netcore的发布,所以可能会遇到莫名奇妙的问 ...

  9. 1.二进制部署kubernetes

    目录 kubernetes的五个组件 master节点的三个组件 kube-apiserver kube-controller-manager kube-scheduler node节点的两个组件 k ...

  10. Redis 的 5 种数据类型的基本使用

    Redis 中的 5 种数据类型 Redis 中 有 5 种数据结构,分别是 "字符串/string","列表/list","集合/set" ...