浮点数表示方法(浮点数怎么算) 您所在的位置:网站首页 整数与浮点数区别 浮点数表示方法(浮点数怎么算)

浮点数表示方法(浮点数怎么算)

#浮点数表示方法(浮点数怎么算) | 来源: 网络整理| 查看: 265

计算机如何表示浮点数?

相对于整数的表示,浮点数的计算机表示有点麻烦。了解计算机是如何表示浮点数的,对编程很有帮助,尤其是对数据精度要求极高的程序。

80年代,所有的计算机厂商都在努力制定自己的浮点数表示规则,所以当时浮点数表示并不统一。有些人注重精度,有些人注重表示的范围,还有一些人更注重执行的速度和简单性。这种情况直到1985年IEEE标准757的出台才得以改变。

我们知道,十进制数DMDM-1 D1D0。1D二号。D-N的计算方法是将每个十进制位di乘以相应位的权重,然后将它们相加:

浮点数表示方法(浮点数怎么算)插图

当小数点左边i=0时,d0的权重为100=1。左边每一位的权重需要乘以10,而小数点右边每一位的权重要除以10。所以d-1的权重是10-1,d-n的权重是10-n .所以小数点左边的权重是10的非负次方得到小数的整数部分,而小数点右边的权重是10的负次方得到小数部分。

二进制浮点数BMBM-1 B1B0。B-1B-2 B-N我应用的是十进制浮点数表示法,但权重不再乘以10的幂,而是用2的幂代替。

与十进制分析相同,小数点左边i=0时b0的权重为20=1,小数点左边每一位对应的权重需要乘以2,而小数点右边每一位的权重除以2。所以b-1的权重是2-1,b-n的权重是2-n .所以小数点左边的权重是2的非负幂得到二进制小数的整数部分,而小数点右边的权重是2的负幂得到小数部分。

上述表示方法称为定点法。看似不错,但考虑到计算机能够表示数据的位数有限,一般浮点型的单精度数用4字节(32位)表示,双精度数用8字节(64位)表示。因此,上述表示方法的准确性非常有限。例如,十进制记数法不能准确地表示1/3和5/7这样的数字。而二进制记数法只能表示那些可以书写的数字。其他值只能近似表示,不能有效地表示范围较广的浮点数。

IEEE中规定的浮点数表示有效地解决了这个问题,其具体表示如下:

使用IEEE中规定的浮点符号。

来表示浮点数。以下详细信息:

上式中 (-1)s决定该浮点数的符号, s=1,该浮点数为负,s=0,该浮点数为正。M表示尾数(significand),二进制小数,它的范围是[1, 2), 或者[0, 1)。注意由于精度问题,前面采用数学上的的左闭右开区间表示并不准确。这里定义一个误差量ɛ。那么M的范围可以表示为1 ~ 2-ɛ 或者 0 ~ 1-ɛ。实际上从M的英文表达更容易理解它的含义。E表示阶码(exponent),很明显E是用来计算权重的。E可以是负数,权重的值为2E 。E的英文表达清楚的表明了其含义。

由于需要对序列码E和尾数M的值进行处理才能得到,这里把M和E分别看成M和E的函数。至此,浮点数的三部分可以分为s、e、m三部分,由于符号位只有0和1两种状态,所以可以用1位来表示。m和e需要用多个比特来表示。

对于单精度浮点数,E用8位表示,M用23位表示。这样,符号比特数+e个占用比特数+m个占用比特数= 1+8+23 = 32比特。在实际内存中,符号位占用最高位(第31位),接下来的8位(30 ~ 23位)用来表示E,剩下的23位(22 ~ 0位)用来表示m,见下图。

对于双精度浮点数,E用11位表示,M用52位表示。这样,符号比特数+e个占用比特数+m个占用比特数= 1+11+52 = 64比特。在实际内存中,符号位占用最高位(第63位),接下来的11位(62 ~ 52位)用来表示E,剩下的52位(51 ~ 0位)用来表示m,见下图。

因为单精度和双精度在讨论中是相似的,所以下面的讨论集中于单精度浮点数。

由于E的值是用8位表示的,所以计算机会根据无符号数来解释E的值,所以它的表示范围是[0,255]。根据e的值,编码值可以分为三种情况:

e的值大于0 并且 小于255,这种数我们成为规范化的数。e的值等于0,这种数我们称为非规范化的数。e的值等于255,这里又分为两种情况,第一种情况是尾数m=0,此时表示该数为无穷大。第二种情况是尾数m≠0,此时表示NaN(Not a Number)不是一个数。

以上三种情况(第三种情况分为两个子情况)可以参考下图。可以看出,顺序码E决定了一个数是规格化的、反规格化的还是特殊的。

分析以下每种情况:

规格化的值

在这种情况下,E的值大于0且小于255。此时,订单代码E将被计算机解释为偏置偏移形式的有符号数。因此,订单代码E=e-Bias,其中Bias为2(k-1)–1(对于单精度k=8,对于双精度k=11)。由于这里讨论的是单精度作为例子,Bias = 27-1 = 127。根据E=e-Bias,可以得出订购码E的取值范围为-126 ~ +127。

关于m部分,计算机会将其解释为十进制值。0.xxxxx,所以0 ≤ m < 1 .计算机会把尾数M做成这样:M = 1+M .因此,M可以看成是1.bnbn-1 b1b0的二进制十进制数..

非规格化的值

当e = 0时,表示的数是非规格化数。在这种情况下,E = 1- Bias,尾数m = m。

为什么会有非归一化数?(1),非规格化数提供了一种表示0的方式。规格化数中,尾数m总是大于等于1,所以不能代表0。因为符号位的原因,浮点数表示有+0.0和-0.0。(2)非规格化数可以表示那些非常接近0.0的数,可以逐渐下溢,使其数值分布甚至接近0.0。

特殊值

当e = 255时,如果m= 0,则表示无穷大。S=0表示+∞,s=1表示-∞。如果m ≠ 0,表示南。比如除以0得到的结果可以用NaN来表示。在某些应用程序中,它还可以表示未初始化的数据。

浮点数在计算机中就是这样表示的。这里还有一个例子来说明:

比如有一个32位的二进制数0010101000110001000000000000,它代表的浮点数是什么?根据之前的知识,我们来做如下分析。32bits代表一个单精度浮点数,所以分为S、E、m三部分,下图显示了整个计算过程:

参考:计算机系统:程序员的视角

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

本文来自网络,若有侵权,请联系删除,作者:苏普百科,如若转载,请注明出处:https://baike.andon8.com/97695.html



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有