IEEE二进制浮点数算术标准学习
2015-07-26 22:46
369 查看
看到有网上有个项目是要求将浮点数用二进制表示出来,需要用IEEE754标准,查了查维基和深入理解计算机系统,重新学习了一遍浮点数在计算机中的表示和内存中的存储,
先简单的做个笔记,后面需要更深入的理解。
IEEE754定义了四种表示浮点数的方式:单精度(32bit),双精度(64bit),延伸单精度(43bit以上),延伸双精度(79bit以上),后两者很少使用,这里讲的是前面两种。
用二进制来表示浮点数分三个部分,以下都已32bit的单精度为例,双精度类似可以推算出来:
三部分为:符号位(sign)、指数(exponent)、尾数(significand,存储二进制小数部分),下面是维基上的图:
单精度浮点数中,sign为1bit,exponent为8bit,significand为23bit,三部分组成32bit。
还有一个概念比较重要“指数偏移值”,在IEEE754中指浮点数表示中的指数域(exponent)的编码值为指数的实际值加上一个固定值,这个固定值的算法是2e-1 - 1
在单精度浮点数中为128-1 = 127.
小数部分定义是f=0.fn-1fn-2...f0,二进制小数点在最高有效位的左边,而有小数定义为M=1 + f,所以M表示成1.fn-1...f0,通过调整指数,使有效数M在1~2之间
看一个例子8.25,
转换成二进制表示1000.01 可以表示成 1.00001 *23
所以指数E = 3 + 127 = 130
所以8.25在内存中表示是:
0 10000010 00001000000000000000000
其中对于小数部分如何转换成二进制,可以按一下方式小数部分*2,取整数部分值(0或者1)
,然后继续取结果的小数部分*2,在取整数部分,一直循环,直到取得想要的位数,
如0.25 *2 = 0.5, 整数部分为0,然后0.5*2=1.0,整数部分为1,所以二进制表示为0.0100000..00
指数的取值范围是从-126~127,所以当一个浮点数如0.25,时可以表示成1.000*2-2
所以指数偏移值为-2 + 127=125
在内存中表示是
0 01111101 00000000000000000000000
以上都是浮点表示中规格化值的用法,其他还有非规格化和特殊值两种,以后再补充。
先简单的做个笔记,后面需要更深入的理解。
IEEE754定义了四种表示浮点数的方式:单精度(32bit),双精度(64bit),延伸单精度(43bit以上),延伸双精度(79bit以上),后两者很少使用,这里讲的是前面两种。
用二进制来表示浮点数分三个部分,以下都已32bit的单精度为例,双精度类似可以推算出来:
三部分为:符号位(sign)、指数(exponent)、尾数(significand,存储二进制小数部分),下面是维基上的图:
单精度浮点数中,sign为1bit,exponent为8bit,significand为23bit,三部分组成32bit。
还有一个概念比较重要“指数偏移值”,在IEEE754中指浮点数表示中的指数域(exponent)的编码值为指数的实际值加上一个固定值,这个固定值的算法是2e-1 - 1
在单精度浮点数中为128-1 = 127.
小数部分定义是f=0.fn-1fn-2...f0,二进制小数点在最高有效位的左边,而有小数定义为M=1 + f,所以M表示成1.fn-1...f0,通过调整指数,使有效数M在1~2之间
看一个例子8.25,
转换成二进制表示1000.01 可以表示成 1.00001 *23
所以指数E = 3 + 127 = 130
所以8.25在内存中表示是:
0 10000010 00001000000000000000000
其中对于小数部分如何转换成二进制,可以按一下方式小数部分*2,取整数部分值(0或者1)
,然后继续取结果的小数部分*2,在取整数部分,一直循环,直到取得想要的位数,
如0.25 *2 = 0.5, 整数部分为0,然后0.5*2=1.0,整数部分为1,所以二进制表示为0.0100000..00
指数的取值范围是从-126~127,所以当一个浮点数如0.25,时可以表示成1.000*2-2
所以指数偏移值为-2 + 127=125
在内存中表示是
0 01111101 00000000000000000000000
以上都是浮点表示中规格化值的用法,其他还有非规格化和特殊值两种,以后再补充。
相关文章推荐
- zoj 月赛
- Java 解决FileInputStream读取中文时乱码的问题
- MarqueeTextview(跑马灯)
- Java开发中的23种设计模式详解(转)
- Java中的构造器
- php传值赋值与引用赋值
- TBB 学习笔记
- Android核心基础-6.Android 耗时操作
- 微信6.2.4版本更新:微信群可转让
- 变革之心——读后感
- UIScrollView的属性总结
- SQL SERVER学习杂记
- iOS app支付宝接口调用的一点总结(补充支付宝SDK&Demo下载地址)
- .9图的制作(也叫9妹图,因为图片格式是以.9结尾的)
- [知识点]SPFA算法
- 学习笔记——mybatis的sql拼接与log4j调试
- UI___UIImageView
- [转]MySQL5.6.22 安装
- myeclipse连接数据库遇到的几个问题
- [主席树 强制在线]ZOJ3888 Twelves Monkeys