浮点数的表示方法

简介: 浮点数的表示方法

把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示。这种把数的范围和精度分别表示的方法,相当于数的小数点位置随比例因子的不同而在一定范围内可以自由浮动,所以称为浮点表示法。


在计算机中一个任意二进制数N可以写成: N=2^e.M

其中M称为浮点数的尾数,是一个纯小数。e是比例因子的指数,称为浮点数的指数,是一个整数。比例因子的基数2对二进记数制的机器是一个常数。

在机器中表示一个浮点数时,一是要给出尾数,用定点小数形式表示。尾数部分给出有效数字的位数,因而决定了浮点数的表示精度。二是要给出指数,用整数形式表示,常称为阶码,阶码指明小数点在数据中的位置,因而决定了浮点数的表示范围。浮点数也要有符号位。


20190213233956617.png


按IEEE754标准,32位浮点数和64位浮点数的标准格式为


20190213223146755.png

20190213223430587.png

不论是32位浮点数还是64位浮点数由于基数2是固定常数,对每一个浮点数都一样,所以不必用显示方式来表示它。


32位的浮点数中,S是浮点数的符号位,占1位,安排在最高位,S=0表示正数,S=1表示负数。M是尾数,放在低位部分,占用23位,小数点位置放在尾数域最左(最高)有效位的右边。E是阶码,占用8位,阶符采用隐含方式,,即采用移码方法来表示正负指数。移码方法对两个指数大小的比较和对阶操作都比较方便,因为阶码域值大者其指数值也大。采用这种方式时,将浮点数的指数真值e变成阶码E时,应将指数e加上一个固定的偏移值127(01111111),即E=e+127。


为了提高数据的表示精度,当尾数的值不为0时,尾数域的最高有效位应为1,这称为浮点数的规格化表示。否则以修改阶码同时左右移动小数点位置的办法,使其变成规格化数的形式。


在IEEE754标准中,一个规格化的32位浮点数x的真值表示为

x = (-1) ^s X(1.M)X 2^(E-127)

e = E - 127

其中尾数域所表示的值是1.M。由于规格化的浮点数的尾数域最左位(最高有效位)总是1,故这一位经常不予存储,而认为隐藏在小数点的左边。于是用23位字段可以存储24位有效数。


64位的浮点数中符号位1位,阶码域11位,尾数域52位,植树偏移值是1023.因此规格化的64位浮点数x的真值为

x = (-1)s X(1.M)X 2^(E-1023)

e = E - 1023


例题

1. 问题: 若浮点数x的754标准存储格式为(41360000)16,求其浮点数的十进制数值。

解:将16进制数展开后,可得二进制数格式为

20190213232019414.png

指数e=阶码-127=10000010-01111111=00000011=(3)10

包括隐藏位1的尾数1.M=1.011 0110 0000 0000 0000 0000=1.011011

于是有

x=(-1)^S X 1.M X 2^e=+(1.011011) X 2^3 = +1011.011=(11.375)10


2. 问题: 将数(20.59375)10转换成754标准的32位浮点数的二进制存储格式。

解:首先分别将整数和小数部分转换成二进制数:

20.59375 = 10100.10011

然后移动小数点,使其在第1、2位之间

10100.10011 = 1.010010011 X 2^4 e = 4

于是得到

S = 0, E = 4 + 127 = 131, M = 010010011

最后得到32位浮点数的二进制存储格式为

0100 0001 1010 0100 1100 0000 0000 0000 = (41A4C000)16

目录
相关文章
remote: HTTP Basic: Access denied. The provided password or token is incorrect or your account has 2
remote: HTTP Basic: Access denied. The provided password or token is incorrect or your account has 2
5138 0
|
12月前
|
JavaScript 前端开发 Java
浮点数介绍
【10月更文挑战第21天】
1044 1
|
网络协议 安全 数据安全/隐私保护
计算机组成原理——浮点数加减运算&强制类型转换
计算机组成原理——浮点数加减运算&强制类型转换
1288 0
计算机组成原理——浮点数加减运算&强制类型转换
|
JavaScript 前端开发 Java
通过JUnit5访问Java静态、私有、保护变量和方法
在《通过Gtest访问C++静态、私有、保护变量和方法》一文中介绍了如何通过Gtest访问C++静态、私有、保护变量和方法,本文介绍如何通过Junit5访问Java静态、私有、保护变量和方法。
206 0
|
SQL 前端开发 Java
又是大佬开源的一款自动预约i茅台APP的系统
这是一篇关于自动预约i茅台APP系统的介绍。该项目是一个开源系统,支持每日自动预约茅台,并且可以使用Docker一键部署。系统特性包括注册账号、添加用户、自动预约、选择预约门店、模拟位置等。提供了GitHub和B站上的视频教程,以及IDEA和Docker的启动指南。用户可以通过链接访问项目代码和文档,了解详细信息。
|
前端开发 数据中心
数据中心框式交换机如何配置堆叠?
数据中心框式交换机如何配置堆叠?
379 0
|
物联网 Linux 芯片
学习嵌入式是选择单片机还是Linux?
单片机通常指的是一种集成了处理器、存储器和各种外设接口的微控制器芯片,常见的有STC、51系列、AVR、ARM Cortex-M等。单片机具有低成本、低功耗、实时性强等特点,适用于对资源要求较低、功耗要求较低、实时性要求较高的嵌入式系统。学习单片机开发可以让您深入了解嵌入式系统的底层原理和硬件编程,对于对嵌入式系统底层开发感兴趣的人来说,是一个很好的选择。
350 4
|
C语言
next数组的两种求法详解及完整代码
求字符串的next数组: 方法一: 这里我们将next数组第1,2位分别设为0,1(还有-1,0这种设法,这里先将其设为0,1若有需要再减一即可) 后面求解每一位的next值时,根据前一位进行比较。 从第三位开始,将前一位与其next值对应的内容进行比较, 如果相等,则该位的next值就是前一位的next值加上1; 如果不等,向前继续寻找next值对应的内容来与前一位进行比较, 直到找到某个位上内容的next值对应的内容与前一位相等为止, 则这个位对应的值加上1即为需求的next值; 如果找到第一位都没有
645 0
next数组的两种求法详解及完整代码