【转】单双精度浮点数的IEEE标准格式
原文网址:http://blog.chinaunix.net/uid-24118190-id-75212.html
单双精度浮点数的IEEE标准格式
关键字:浮点数 IEEE标准
大多数高级语言按照IEEE-754标准来规定浮点数的存储格式。
IEEE-754规定 单精度浮点数用4字节存储,双精度浮点数用8字节存储,表示为三部分:符号位、阶和尾数。
S+E+M
S 符号位,尾数的符号位;
E 阶,即指数;
M 尾数,即有效小数位数;
单精度格式
符号位 1位, bit31
阶 8位,bit30~23
尾数 24位,bit22~0
双精度
符号位 1位,bit63
阶 11位,bit62~52
尾数 53位,bit51~0
省略位
二进制数的规格化表示中,小数点前的数(即二进制表示的最高位)为1,故省略之。
所以 float的M 用23位可以表示24位的值,double的M 用52位可以表示53位的值。
阶码
以移码的形式存储。对于float偏移量为127(7FH),对于double偏移量为1023(3FFH)。
存储浮点数的阶码之前,偏移量要先加到阶码上。原因如下:
float的值的二进制科学计数法表示中 阶的范围 ±127, 当一个数“无限”趋近于0,即为 浮点0.
为了保证 浮点0 与 机器0 的存储表示一样,阶在存储时加上偏移 127
eg
2^3,移码的结果 在单精度中为82H(130=3+127),在双精度中为402H(1026=3+1023)。
浮点数有两个例外
0.0存储为全零;
无限大数的阶码存储为全1,尾数部分全零,符号位指示正无穷或者负无穷。
例子:
float 十进制 规格化(S+E+M)
-12 -1.1x23 1 10000010 1000000 00000000 00000000
0.25 1.0x2-2 0 01111101 0000000 00000000 00000000
所有字节在内存中的排列顺序
intel的cpu按little endian顺序
motorola的cpu按big endian顺序排列。
常用的浮点数存储格式:32-bit IEEE-754 floating-point format
对于大小为32-bit的浮点数(32-bit为单精度,64-bit浮点数为双精度,80-bit为扩展精度浮点数),
1、其第31 bit为符号位,为0则表示正数,反之为复数,其读数值用s表示;
2、第30~23 bit为幂数,其读数值用e表示;
3、第22~0 bit共23 bit作为系数,视为二进制纯小数,假定该小数的十进制值为x;
十进制转浮点数的计算方法:则按照规定,十进制的值用浮点数表示为:
如果十进制为正,则s = 0,否则s = 1;将十进制数表示成二进制,然后将小数点向左移动,直到这个数变为1.x的形式即尾数,移动的个数即位指数。为了保证指数为正,将移动的个数都加上127,由于尾数的整数位始终为1,故舍去不做记忆。
对3.141592654来说,
1、正数,s = 0;
2、3.141592654的二进制形式为正数部分计算方法是除以二取整,即得11,小数部分的计算方法是乘以二取其整数,得0.0010 0100 0011 1111 0110 1010 1000,那么它的二进制数表示为11.0010 0100 0011 1111 0110 1010 1;
3、将小数点向左移一位,那么它就变为1.1001 0010 0001 1111 1011 0101 01,所以指数为1+127=128,e = 128 = 1000 0000;
4、舍掉尾数的整数部分1,尾数写成0.1001 0010 0001 1111 1011 0101 01,x = 921FB6
5、最后它的浮点是表示为0 1000 0000 1001 0010 0001 1111 1011 0101 = 40490FDA
浮点数转十进制的计算方法:
则按照规定,浮点数的值用十进制表示为:
= (-1)^s * (1 + x) * 2^(e - 127)
对于49E48E68来说,
1、其第31 bit为0,即s = 0
2、第30~23 bit依次为100 1001 1,读成十进制就是147,即e = 147。
3、第22~0 bit依次为110 0100 1000 1110 0110 1000,也就是二进制的纯小数0.110 0100 1000 1110 0110 1000,其十进制形式为(0.110 0100 1000 1110 0110 1000 * 2^23) / (2^23) = (0x49E48E68 & 0x007FFFFF) / (2^23) = (0x648E68) / (2^23) = 0.78559589385986328125,即x = 0.78559589385986328125。
这样,该浮点数的十进制表示
= (-1)^s * (1 + x) * 2^(e - 127)
= (-1)^0 * (1+ 0.78559589385986328125) * 2^(147-127)
= 1872333
http://discuz.liulc.com/dnt2/showtopic.aspx?topicid=59&page=end
【转】单双精度浮点数的IEEE标准格式的更多相关文章
- 深入理解计算机系统(2.7)---二进制浮点数,IEEE标准(重要)
2.6我们进行了二进制整数运算的最后一役,本次LZ将和各位一起进入浮点数的世界,这里没有无符号,没有补码,但是有各种各样的惊奇.倘若你真正的进入了浮点数的世界,一定会发现它原来是这么有意思,而不是像之 ...
- 【转】浮点数与IEEE 754
http://www.cnblogs.com/kingwolfofsky/archive/2011/07/21/2112299.html 浮点数 1. 什么是浮点数 在计算机系统的发展过程中,曾经 ...
- IEEE Floating Point Standard (IEEE754浮点数表示法标准)
浮点数与定点数表示法是我们在计算机中常用的表示方法 所以必须要弄懂原理,特别是在FPGA里面,由于FPGA不能像在MCU一样直接用乘除法. 定点数 首先说一下简单的定点数,定点数是克服整数表示法不能表 ...
- float:浮点型double:双精度实型decimal:数字型单精度浮点数(Single)双精度浮点数(double)
单精度浮点数(Single) 双精度浮点数(double) Decimal为SQL Server.MySql等数据库的一种数据类型,不属于浮点数类型,可以在定义时划定整数部分以及小 ...
- 小朋友学C语言(4):单精度浮点数与双精度浮点数
上节课简单介绍了浮点数.计算机程序中的浮点数分为单精度浮点数和双精度浮点数. 单精度和双精度精确的范围不一样. 计算机里的最基本的存储单位用位(bit)来表示.bit只能用来存储0或1. 稍大一点的单 ...
- jar包目录下MANIFEST.MF标准格式
jar包目录格式: |-- com | |-- test.class |-- META-INF | |-- MAINFEST.MF 一个正常的jar包下必有META-INF/MANIFEST.MF清单 ...
- 将时区格式的时间转换为易于阅读的标准格式"yyyy-MM-dd"
Date的显示格式就是时区格式, String 标准格式 = new SimpleDateFormat("yyyy--MM--dd").format(new Date());
- C语言atof()函数:将字符串转换为double(双精度浮点数)
头文件:#include <stdlib.h> 函数 atof() 用于将字符串转换为双精度浮点数(double),其原型为:double atof (const char* str); ...
- IEEE参考文献格式
IEEE参考文献格式 由于国外期刊参考文献与国内参考文献的格式有很大区别,其中最常用的参考文献为会议论文.书籍.期刊文献,所以特别在此记录说明,方便以后使用. 会议论文(Published Confe ...
随机推荐
- SKTextureAtlas类
继承自 NSObject 符合 NSCodingNSObject(NSObject) 框架 /System/Library/Frameworks/SpriteKit.framework 可用性 可用 ...
- Android 关于获取摄像头帧数据解码
由于Android下摄像头预览数据只能 ImageFormat.NV21 格式的,所以解码时要经过一翻周折. Camera mCamera = Camera.open(); Camera.Param ...
- boost 相等与等价的区别
- 使用Intent实现Activity的隐式跳转
相比于显式Intent,隐式Intent 则含蓄了许多,它并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的action 和category 等信息,然后交由系统去分析这个Intent,并 ...
- [转] Makefile中调用Shell
1.在Makefile中只能在target中调用Shell脚本,其他地方是不能输出的.比如如下代码就是没有任何输出: VAR="Hello" echo "$(VAR)&q ...
- DataTable操作工具类DataTableHelper
DataTable操作工具类DataTableHelper. 功能介绍: 将泛型集合填充为数据表 将泛型填充为数据表 将对象集合填充为数据表 将对象填充为数据表 将定IDictionary数据转换为D ...
- HBuilder开发app ajax跨域 解决XMLHttpRequest
<div id="a1" onclick="testXHR()" style="font-size: 5em;">sss1< ...
- 分析器错误消息: 未能加载类型“WebApplication._Default”
1.新建一个空白解决方案2.新闻一个Web Application项目 默认就有Default.aspx 直接调试的时候出现-------------------------------------- ...
- Nginx配置域名转发实例
域名:cps.45wan.com 所在阿里云主机:123.35.9.12 45wan没有在阿里云备案 67wan已经在阿里云备案 阿里云主机(假如123.35.9.12)上原来的nginx配置: ...
- iptables里filter表前面几个数字的意思
一般的linux系统iptables配置文件filter表前面都带下面三行,但是具体是什么意思呢! *filter:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OU ...