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

十进制数转换成浮点数的步骤:
将十进制数转换成二进制数:整数部分用2来除,小数部分用2来乘;
规格化二进制数:改变阶码,使小数点前面仅有第一位有效数字;
计算阶码: 短型浮点数的阶码加上偏移量7FH 长型浮点数的阶码加上偏移量3FFH 扩展型浮点数的阶码加上偏移量3FFFH
以浮点数据格式存储。 把数值的符号位、阶码和尾数合在一起就得到了该数的浮点存储形式
浮点数转换成十进制数的步骤:
该步骤与前面“十进制数转换成浮点数”的步骤是互逆的,其具体步骤如下:
分割数字的符号、阶码和有效数字;
将偏移阶码减去偏移,得到真正的阶码;
把数字写成规格化的二进制数形式;
把规格化的二进制数改变成非规格化的二进制数;
把非规格化的二进制数转换成十进制数。
对于不同长度的浮点数,阶码与小数位分配的数量不一样,如下:
对于32位的单精度浮点数,数符分配是1位,阶码分配了8位,尾数分配了是23位。
IEEE754标准浮点格式的更多相关文章
- 【转】浮点格式IEEE754详解
原文网址:http://www.cnblogs.com/zjujunge/archive/2012/09/13/2682613.html Intel聘请了最好的数值分析家来为8087FPU设计浮点数格 ...
- 第二章 运算方法与运算器(浮点数的加减法,IEEE754标准32/64浮点规格化数)
这一章,主要介绍了好多种计算方法.下面,写一点自己对于有些计算(手写计算过程)的见解. 1.原码.反码.补码 原码:相信大家都会写,符号位在前二进制数值在后,凑够位数即可. 反码:原码符号位不变,其他 ...
- 十进制浮点数转换成IEEE754标准的32浮点数的二进制格式
参考: http://jimmygod.blog.163.com/blog/static/43511339200792605627411/ http://blog.csdn.net/archersab ...
- C#中浮点数依IEEE-754标准转二进制串 (MODBUS 浮点数转换)
因工作需要,把再串口通信中浮点数与字节流的数据转换函数放在这,转发的,谢谢原作者. 今天花了一天的时间搜罗资料,为了解决一个串口编程的进制转化问题.因为串口传送的浮点数据格式与IEEE-754标准(3 ...
- 【转载】JS Number类型数字位数及IEEE754标准
JS的基础类型Number,遵循 IEEE 754 规范,采用双精度存储(double precision),占用 64 bit.如图 意义 1位用来表示符号位 11位用来表示指数 52位表示尾数 浮 ...
- JS Number类型数字位数及IEEE754标准
JS的基础类型Number,遵循 IEEE 754 规范,采用双精度存储(double precision),占用 64 bit.如图 意义 1位用来表示符号位 11位用来表示指数 52位表示尾数 浮 ...
- IEEE754标准浮点数表示与舍入
原文地址:https://blog.fanscore.cn/p/26/ 友情提示:本文排版不太好,但内容简单,请耐心观看,总会搞懂的. 1. 定点数 对于一个无符号二进制小数,例如101.111,如果 ...
- IEEE754标准
以下计算按规格化规定: S:符号位 M:分数值 E:指数偏移值 单精度浮点数(32bit): NUM_single = (-1)^S * 1.M * 2^(E-127) 双精度浮点数(64b ...
- 将四个BYTE数值转换成IEEE754标准的浮点数(两种方法:用Addr函数取字节数字的首地址,或者用Absolute关键字)
在工作中,经常使用到IEEE754格式的数据.IEEE754格式的数据占四个字节,好像Motorola格式和Intel格式的还不一样. 由于工作中很少和他打交道(使用的软件内部已经处理),就没太在意. ...
随机推荐
- java实现拍7游戏
** 拍7游戏** 许多人都曾经玩过"拍七"游戏.规则是:大家依次从1开始顺序数数,数到含有7或7的倍数的要拍手或其它规定的方式表示越过(比如:7,14,17等都不能数出),下一人 ...
- 简谈Java语言的封装
简谈Java语言的封装 封装的定义 封装将复杂模块或系统的逻辑实现细节隐藏,让使用者只需要关心这个模块或系统怎么使用,而不用关心这个模块或系统是怎么实现的. 在面向对象的的编程中,我们一般通过接口来描 ...
- 你是项目经理了![IT项目经理成长晋升记1]
凉爽的秋风,吹走了严热的夏季,K公司内部传来一个重磅消息.销售团队披荆斩棘,过三关斩六将,成功胜出,拿下公司在C省的首单,为C省市场的开拓打下了基础. K公司是2003年“非典”时期成立,坐落在美丽的 ...
- 树莓派配置文档config.txt说明
原文连接:http://elinux.org/RPi_config.txt 由于树莓派并没有传统意义上的BIOS, 所以现在各种系统配置参数通常被存在"config.txt"这个文 ...
- 总结:修改相关postgres用户密码
1.修改linux系统postgres用户的密码 PostgreSQL会创建一个默认的linux用户postgres,修改该用户密码的方法如下: 步骤一:删除用户postgres的密码 sudo p ...
- c常用函数-strchr和strrchr
strchr和strrchr strrchr函数用于查找指定字符在一个字符串中最后一次出现的位置,然后返回指向该位置的指针 strchr函数用于查找指定字符在一个字符串中第一次出现的位置,然后返回指向 ...
- springboot整合Mybatis(有xml)
pom.xml <!-- mybatis 支持 SpringBoot --> <dependency> <groupId>org.mybatis.spring.bo ...
- c++ 对vector和deque进行逆序排序问题
1.vector vector<int> data1; 2.deque deque <int> data2; 逆序排序方式: 方式1.使用reverse函数 (内置数据类型 ...
- 【Java思考】Java 中的实参与形参之间的传递到底是值传递还是引用传递呢?
科普: 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数. 引用传递(pass by reference)是指在 ...
- MongoDB via Dotnet Core数据映射详解
用好数据映射,MongoDB via Dotnet Core开发变会成一件超级快乐的事. 一.前言 MongoDB这几年已经成为NoSQL的头部数据库. 由于MongoDB free schema ...