说明

在IEEE标准中,浮点数在内存中的表示是将特定长度的连续字节的所有二进制位按特定长度划分为符号域,指数域和尾数域三个连续域。

float

float类型在内存中占用的位数为: 1+8+23=32bits

double

1+11+52=64bits

第一位s代表符号为,1代表负数,0代表正数。

第二个域是指数域,对于单精度float类型,指数域有8位,可以表示 0-255个指数值。指数值规定了小数点的位置,小数点的移动代表了所表示数值的大小。但是,指数可以为正数,也可以为负数。为了处理负指数的情况,实际的指数值按要求需要加上一个偏差(Bias)值作为保存在指数域中的值,单精度数的偏差 值为 -127,而双精度double类型的偏差值为 -1023。比如,单精度指数域中的64 则表示实际的指数值 -63。 偏差的引入使得对于单精度数,实际可以表达的指数值的范围就变成-127 到 128 之间(包含两端)。我们不久还将看到,实际的指数值-127(保存为 全 0)以及 +128(保存为全1)保留用作特殊值的处理。这样,实际可以表达的有效指数范围就在 -126 和 +127 之间。

第三个域为尾数域,其中单精度数为 23 位长,双精度数为 52 位长。比如一个单精度尾数域中的值为: 00001001000101010101000, 第二个域中的指数值则规定了小数点在尾数串中的位置,默认情况下小数点位于尾数串首位之前。  

比如指数值为 -1,则该float数即为:.000001001000101010101000,如果为+1,则该float 数值为:0.0001001000101010101000。我们知道引入浮点数的目的在于用尽可能少的位数表示既高精度又大范围的实数,其中的范围大小是由指数域位长确定的,而尾数域的长度则确定了所能表示实数的精度,所以double比float数的精度更高,范围更大,相应的也就占用更多的内存。 刚才我们介绍的对尾数域中的值的解释并不能实现这个精度最大化的目标,因为在尾数串第一个”1”之前还有4个”0”,这4个”0”实际上是多余的,因为我们把小数点向前移动时,前端的"0"是自动添加的,所以可以把这4个“0”删除,然后尾数域末端多出4个位来表示更高精度的数值。也就是说尾数的第一位一定是"1",那么既然第一位一定是"1",那么我们也就没有必要把它存储在尾数域中,而是直接默认尾数为1.xxxx…xxx的形式。尾数的首位从小数点后开始。那么上面的例子所表示的尾数就是:
1.00001001000101010101000。 用23位表示了24位的信息 (小数点不占位置).

表示

一个规格化的32位浮点数x的真值为:

x=(−1)^s × (1.M) × 2^E−127

一个规格化的64位浮点数x的真值为:

x=(−1)^s × (1.M) × 2^E−1023

下面举一个32位单精度浮点数-3.75表示的例子帮助理解:

(1) 首先转化为2进制表示

−3.75=−(2+1+1/2+1/4)=−1.111×2^1

(2) 整理符号位并进行规格化表示

−1.111×21=(−1)(1)×(1+0.1110 0000 0000 0000 0000 000)×2^1

(3) 进行阶码的移码处理

(−1)^(1)×(1+0.1110 0000 0000 0000 0000 000)×2^1

=(−1)^(1)×(1+0.1110 0000 0000 0000 0000 000)×2^128−127

于是,符号位S=1,尾数M为1110 0000 0000 0000 0000 000阶码E为128_10=1000 0000_2,则最终的32位单精度浮点数为1 1110 0000 0000 0000 0000 000 1000 0000

浮点数表示范围与精度

通过上面的规格化表示,我们可以很容易确定浮点数的表示范围:

一般提到浮点数的精度(有效位数)的时候,总是会出现 float的有效位为6~7位, double的有效位为15~16位 。

既然有表示范围,那肯定也有不能表示的数值:

下面以float为例,解释一下有效位数是怎样来的。

有效位数只和规格化浮点数的尾数部分有关,而尾数部分的位数是23位,因此我们首先列出下表

由上面的表格可以看出:

2−23 和 2−22 之间是存在间隔的,即0.0000001和0.0000002之间的小数我们是没有办法描述的,因此23位尾数最多只能描述到小数点后第7位;此外,我们通过四舍五入可以很容易发现0.0000003=0.0000004=2−23+2−22, 这表明第7位有效数字只是部分准确。而第6位及之前的都是可以准确描述的,因此我们说float的有效位为6~7位。

例子

参考资料:

http://blog.csdn.net/shuzfan/article/details/53814424

http://blog.csdn.net/techx/article/details/43830781

计算机浮点数规格化表示相关推荐

  1. 计算机浮点数规格化与IEEE754

    浮点数的表示 浮点数表示:N=M∗REN = M*R^{E}N=M∗RE 其中M(Mantissa)称为尾数.R(Radix)为基数,二进制的基数为2.E(Exponent)为阶码. 例如: 12.3 ...

  2. 计算机浮点数规格化表示(转)

    转载自:https://blog.csdn.net/qq_29287973/article/details/78914821 说明 查看全文 http://www.taodudu.cc/news/sh ...

  3. 关于浮点数规格化表示的问题

    记录一下浮点数格式化上自己学习理解过程中的问题 这是小生第一篇博客,准备开始记录自己的学习历程,方便日后查看,也望得到广大博主的批评指正,帮助小生能在学习上精益求精,多谢多谢. 首先,为什么要规格化 ...

  4. 计算机浮点数乘法过程,计算机中单精度浮点数运算详解

    写在前面 在PA_2019fall中有一项任务是完成CPU中的浮点数运算,这也是我第一次认真的思考了一下真实的计算机中CPU是如何进行的浮点数运算 在写PA的过程中一头雾水,从迷茫,到困惑,到弄懂,到 ...

  5. 浮点数规格化与定点数

    浮点数规格化与定点数 一.定点表示 定点数:小数点固定在某一位置的数为定点数. 二.浮点表示 1. 浮点数 2. 浮点数的表示范围: 3. 浮点数的规格化 一.定点表示 定点数:小数点固定在某一位置的 ...

  6. 32位浮点数规格化 计算

    表示格式: S:浮点数的符号位 E:阶码 M:位数 e:指数真值 公式: x =( -1 )s × ( 1.M ) × 2e E = e +127 计算方式: 现在变成 2 进制 带入公式算出 S.M ...

  7. 【计算机基础】详解IEEE754浮点数规格化表示(小数点左边隐含一位1)

    1.IEEE浮点表示 IEEE(读作"eye-triple-ee")浮点标准754中,用图1的形式来表示一个数: 图1 浮点数表示形式​​​ 符号(sign)--s决定这个数是负数 ...

  8. 计算机浮点数格式化表示方法,浮点数在计算机中是如何表示的

    原标题:浮点数在计算机中是如何表示的 来源:编程珠玑 前言 相比int等整型,float等浮点类型的表示和存储较为复杂,但它又是一个无法回避的话题,那么就有必要对浮点一探究竟了.在计算机中,一般用IE ...

  9. 用计算机浮点数表示法计算,计算机组成原理第4章浮点数运算方法ppt课件

    PPT内容 这是计算机组成原理第4章浮点数运算方法ppt课件下载,主要介绍了浮点数的表示:浮点加减运算:浮点加减运算的步骤:浮点数加减运算流程图:浮点加减法运算:浮点运算所需的硬件配置,欢迎点击下载. ...

最新文章

  1. 毕设过程中的学习 随便写写~
  2. iOS网络 POST模拟表单上传单个与多个文件(直接调用分类里的方法即可)
  3. JSP2.0语法初步掌握(学习笔记)
  4. linux 脚本中除法运算符,Linux中Shell的算数运算符和位运算符用法笔记
  5. c#调用刀片小票打印机
  6. IOS开发基础之图片轮播器-12
  7. 如何正确的检测对象类型?
  8. php备份远程系统快照,ZFS snapshot高级篇之快照备份
  9. 百练 2972 确定进制 解题报告
  10. 百度地图API的使用教程以及案例
  11. Gantt - attachEvent所有事件(归类、索引)
  12. c语言书199页第12题,单片机C语言入门实例和最常见问题分析(含程序部分了)(199页)-原创力文档...
  13. 机械键盘POKER2的硬编程
  14. 【mmdetection】对VOC格式的数据集进行测试
  15. 计算机音乐谱恋人心,天刀曲谱大全_天涯明月刀曲谱恋人心
  16. 去掉word 2007中可恶的信息检索
  17. netty 服务端主动向客户端发信息
  18. 一个小需求引发的思考
  19. 查看Windows凭据存储密码的方法 2022亲测有效
  20. android java join_java中的join用法

热门文章

  1. 用友NCV6.1 NC数据库持久化学习
  2. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java班级事务管理系统n2tzw
  3. 北京大学出版社AI类最畅销的5本书!包括机器学习、深度学习实战、数学基础等...
  4. 粘贴PDF文本批量去掉换行符
  5. 汤晓鸥:人工智能在中国有点过热了,我想泼泼冷水
  6. 关于SSD的一些日记
  7. Convex-ConCave Procedure(CCCP) 凹凸规划 高效的问题分解求解方法
  8. Java 数据结构和算法的总结
  9. ubuntu12.04 安装eclipse C++,并配置交叉编译工程
  10. java.lang.VerifyError: Verifier rejected class ...解决方案