ieee浮点表示
ieee浮点表示用下式表示一个数
V=(-1)^S * M * 2^E
+ 符号 S表示这个数是正数(0)还是负数(1),由单独符号位s直接编码
+ 尾数 M是一个二进制小数,由n位小数字段frac编码,同时还依赖阶码字段判断是否为0
+ 阶码 E的作用是对浮点数进行加权,权重是2的E次幂,由k位的阶码字段exp编码
在单精度浮点数格式中,s,exp和frac字段分别为1位,k=8位和n=23位,得到一个32位的表示,而双精度浮点数中,在c语言中共64位,s,exp和frac字段分别为1位,k=11位和n=52位,得到一个64位的表示。
根据exp的值可以分为三种不同情况
- 规格化的
此时exp的位模式不会是全为0或全为1,此时阶码字段被解释为以偏置形式表示的有符号整数,也就是说阶码的值为 E=e-bias ,bias为 2^k-1 (单精度为127,双精度为1023),e的位表示为阶码字段到现在为止都在抄书
尾数的定义 M=1+f 。也叫隐含以1开头的表示 - 非规格化的
exp的位全为0此时,阶码值为 E=1-bias ,尾数的值 M=f ,也就是小数字段的值,不包含隐含的1。
非规格化数有两个用途,一是提供了表式数值0的方法,因为使用规格化数总是使 M>=1 ,导致无法表示0;二是表示那些非常接近0.0的数,他提供了一种属性,称为逐渐下溢 - 特殊值
exp的位全位1时,frac全为0时表示无穷,符号位表示是正无穷还是负无穷
当frac非0时,结果被称为“NaN”,即“not a number”。
总结
准备开始写blog,表示完全没有自己的想法,稍微学习了markdown的语法,其实相当简单,对浮点数的理解还是不够充足,还要反复琢磨,don't 害怕 learn something new
author:zuoyu
文章评论