浮点数及其国际标准

原创 2012年03月28日 23:30:05

浮点数float)又称作浮点数,是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体来说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次得到,这种表示方法类似于基数为10的科学记数法

浮点计算是指浮点数参与的运算,这种运算通常伴随着因为无法精确表示而进行的近似或舍入。

一个浮点数a由两个数me来表示:a = m × be。在任意一个这样的系统中,我们选择一个基数b(记数系统的基)和精度p(即使用多少位来存储)。m(即尾数)是形如±d.ddd...ddd的p位数(每一位是一个介于0到b-1之间的整数,包括0和b-1)。如果m的第一位是非0整数,m称作正规化的。有一些描述使用一个单独的符号位(s 代表+或者-)来表示正负,这样m必须是正的。e是指数。

这种设计可以在某个固定长度的存储空间内表示定点数,但无法表示的更大范围的数。

例如,一个指数范围为±4的4位十进制浮点数可以用来表示43210,4.321或0.0004321,但是没有足够的精度来表示432.123和43212.3(必须近似为432.1和43210)。当然,实际使用的位数通常远大于4。

此外,浮点数表示法通常还包括一些特别的数值:+∞和?6?1∞(正负无穷大)以及NaN('Not a Number')。无穷大用于数太大而无法表示的时候,NaN则指示非法操作或者无法定义的结果。

计算机中的浮点数

大部份计算机采用二进制(b=2)的表示方法。(bit)是衡量浮点数所需存储空间的单位,通常为32位或64位,分别被叫作单精度双精度。有一些计算机提供更大的浮点数,例如英特尔公司的浮点运算单元Intel8087协处理器(以及其被集成进x86处理器中的后代产品)提供80位长的浮点数,用于存储浮点运算的中间结果。还有一些系统提供128位的浮点数(通常用软件实现)。

浮点数的标准

在计算机使用的浮点数被电气电子工程师协会(IEEE)规范化为IEEE 754

IEEE 754

IEEE二进制浮点数算术标准IEEE 754)是1980年代以来最广泛使用的浮点数运算标准,为许多CPU浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷非数值(NaN)),以及这些数值的“浮点数运算符”;它也指明了四种数值舍入规则和五种例外状况(包括例外发生的时机与处理方式)。

IEEE 754规定了四种表示浮点数值的方式:单精确度(32位元)、双精确度(64位元)、延伸单精确度(43位元以上,很少使用)与延伸双精确度(79位元以上,通常以80位元实做)。只有32位元模式有强制要求,其他都是选择性的。大部分编程语言都有提供IEEE浮点数格式与算术,但有些将其列为非必需的。例如,IEEE 754问世之前就有的C语言,现在有包括IEEE算术,但不算作强制要求(C语言的float通常是指IEEE单精确度,而double是指双精确度)。

该标准的全称为IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985),又称IEC 60559:1989,微处理器系统的二进制浮点数算术(本来的编号是IEC 559:1989)[1]。后来还有“与基数无关的浮点数”的“IEEE 854-1987标准”,有规定基数为2跟10的状况。现在最新标准是“IEEE 854-2008标准”。

在六、七十年代,各家计算机公司的各个型号的计算机,有着千差万别的浮点数表示,却没有一个业界通用的标准。这给数据交换、计算机协同工作造成了极大不便。IEEE的浮点数专业小组于七十年代末期开始酝酿浮点数的标准。在1980年,英特尔公司就推出了单片的8087浮点数协处理器,其浮点数表示法及定义的运算具有足够的合理性、先进性,被IEEE采用作为浮点数的标准,于1985年发布。而在此前,这一标准的内容已在八十年代初期被各计算机公司广泛采用,成了事实上的业界工业标准。

特殊值

这里有三个特殊值需要指出:

  1. 如果 指数 是0 并且 小数部分 是0,这个数±0(和符号位相关)
  2. 如果 指数 = 2e ?6?1 1 并且 小数部分 是0,这个数是 ±无穷大(同样和符号位相关)
  3. 如果 指数 = 2e ?6?1 1 并且 小数部分 非0,这个数表示为不是一个数(NaN)

以上规则,总结如下:

形式 指数 小数部分
0 0
非规约形式 0 非0
规约形式 1  2e ?6?1 2 任意
无穷 2e ?6?1 1 0
NaN 2e ?6?1 1 非零

[编辑]32位单精度

单精度二进制小数,使用32个位元存储。

1 8 23 位长
S Exp Fraction
31 3023
偏正值 (实际的指数大小+127)
220 位编号(从右边开始为0)

S为符号位,Exp为指数位,Fraction为有效数位。 指数部分即使用所谓的偏正值形式表示,偏正值为实际的指数大小与一个固定值(32位的情况是127)的和。采用这种方式表示的目的是简化比较。因为,指数的值可能为正也可能为负,如果采用补码表示的话,全体符号位S和Exp自身的符号位将导致不能简单的进行大小比较。正因为如此,指数部分通常采用一个无符号的正数值存储。单精度的指数部分是?6?1126~+127加上偏移值127 ,指数值的大小从1~254(0和255是特殊值)。浮点小数计算时,指数值减去偏正值将是实际的指数大小。

单精度浮点数各种极值情况:

类别 正负号 实际指数 有偏移指数 指数域 尾数域 数值
0 -127 0 0000 0000 000 0000 0000 0000 0000 0000 0.0
负零 1 -127 0 0000 0000 000 0000 0000 0000 0000 0000 ?6?10.0
1 0 0 127 0111 1111 000 0000 0000 0000 0000 0000 1.0
-1 1 0 127 0111 1111 000 0000 0000 0000 0000 0000 ?6?11.0
最小的非规约数 * -127 0 0000 0000 000 0000 0000 0000 0000 0001 ±2?6?123 × 2?6?1126 = ±2?6?1149 ≈ ±1.4×10-45
中间大小的非规约数 * -127 0 0000 0000 100 0000 0000 0000 0000 0000 ±2?6?11 × 2?6?1126 = ±2?6?1127 ≈ ±5.88×10-39
最大的非规约数 * -127 0 0000 0000 111 1111 1111 1111 1111 1111 ±(1?6?12?6?123) × 2?6?1126 ≈ ±1.18×10-38
最小的规约数 * -126 1 0000 0001 000 0000 0000 0000 0000 0000 ±2?6?1126 ≈ ±1.18×10-38
最大的规约数 * 127 254 1111 1110 111 1111 1111 1111 1111 1111 ±(2?6?12?6?123) × 2127 ≈ ±3.4×1038
正无穷 0 128 255 1111 1111 000 0000 0000 0000 0000 0000 +∞
负无穷 1 128 255 1111 1111 000 0000 0000 0000 0000 0000 ?6?1∞
NaN * 128 255 1111 1111 non zero NaN
* 符号位可以为0或1 .

[编辑]64位双精度

双精度二进制小数,使用64个位元存储。

1 11 52 位长
S Exp Fraction
63 6252
偏正值 (实际的指数大小+1023)
510 位编号(从右边开始为0)

S 为符号位,Exp为指数位,Fraction为有效数位。 指数部分即使用所谓的偏正值形式表示,偏正值为实际的指数大小与一个固定值(64位的情况是1023)的和。采用这种方式表示的目的是简化比较。因为,指数的值可能为正也可能为负,如果采用补码表示的话,全体符号位S和Exp自身 的符号位将导致不能简单的进行大小比较。正因为如此,指数部分通常采用一个无符号的正数值存储。双精度的指数部分是?6?11022~+1023加上1023 ,指数值的大小从1~2046(0(2进位全为0)和2047(2进位全为1)是特殊值)。浮点小数计算时,指数值减去偏正值将是实际的指数大小。

[编辑]浮点数的比较

浮点数基本上可以按照符号位、指数域、尾数域的顺序作字典比较。显然,所有正数大于负数;正负号相同时,指数的二进制表示法更大的其浮点数值更大。

[编辑]浮点数的舍入

任何有效数上的运算结果,通常都存放在较长的暂存器中,当结果被放回浮点格式时,必须将多出来的位元丢弃。 有多种方法可以用来执行舍入作业,实际上IEEE标准列出4种不同的方法:

  • 舍入到最接近:会将结果舍入为最接近且可以表示的值。这是缺省的近似方法。
  • 朝+∞方向舍入:会将结果朝正无限大的方向舍入。
  • 朝-∞方向舍入: 会将结果朝负无限大的方向舍入。
  • 朝0方向舍入: 会将结果朝0的方向舍入。

相关文章推荐

浮点数与IEEE浮点标准

1 IEEE浮点数1.1 格式IEEE定义了多种浮点格式,但最常见的是三种类型:单精度、双精度、扩展双精度,分别适用于不同的计算要求。一般而言,单精度适合一般计算,双精度适合科学计算,扩展双精度适合高...
  • wenrang
  • wenrang
  • 2010年07月23日 20:10
  • 11553

IEEE浮点标准详解

1 IEEE浮点数 1.1 格式 IEEE定义了多种浮点格式,但最常见的是三种类型:单精度、双精度、扩展双精度,分别适用于不同的计算要求。一般而言,单精度适合一般计算,双精度适合科学计算,扩展双精...

二进制浮点数,IEEE标准

二进制浮点数,IEEE标准 额...啥叫IEEE标准?别着急啊,往后看,这一次我和大家一起学习一下浮点数,这里没有无符号,没有补码,俗话说得好,上帝给你关了一扇门,肯定给你打开一扇窗,没有那种东西饿...

无符号256位整数运算

源代码出处:github blue-app-eth/src_common。 这个源代码包括两个文件,分别是uint256.h和uint256.c。 有关计算是基于类型uint128_t上实现的。 ...

decimal类型

C#有一个数值类型具有128位精度(参见表2-3)。它适合大而精确的计算,尤其是金融计算。表2-3 decimal类型类型大小范围BCL名称有效数字decimal128位1.0×1028~大约7.9×...

ESRI支持的ISO/TC 211国际标准

ISO/TC 211 Geographic Information  Standards   ESRI公司实现该规范。   ISO 19106:2004——Profil...
  • SYDBC
  • SYDBC
  • 2013年12月30日 17:11
  • 900

国际标准智商测试题答案

请从理论上或逻辑的角度在后面的空格中填入后续字母或数字;A, D, G, J 1, 3, 6, 10 1, 1, 2, 3, 5 21, 20, 18, 15, 11 8, 6, 7, 5, 6, 4...

与邮件系统相关的国际标准协议

与邮件系统相关的国际标准协议有很多,用的最多的应该是关于SMTP协议的RFC821和邮件头格式规定的RFC822,其实还有很多相关的协议,做和邮件相关工作的人员都应该看一看。 ---------...
  • xjbclz
  • xjbclz
  • 2016年07月14日 20:43
  • 557

ISO9000 质量管理和质量保证系列国际标准

(一)ISO9000认证的背景国际标准化组织(ISO)是世界上最主要的非政府间国际标准化机构,成立于二次世界大战以后,总部位于瑞士日内瓦。该组织的目的是在世界范围内促进标准化及有关工作的发展,以利于国...
  • txw1958
  • txw1958
  • 2013年07月23日 17:06
  • 929

射频识别技术漫谈(2)——国际标准

【转自】http://blog.sina.com.cn/s/blog_9ed067ad0100xlig.html 如果你只是智能卡的用户,通常可以不必关注国际标准,但作为智能卡的专业开发人员,则至少也...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浮点数及其国际标准
举报原因:
原因补充:

(最多只允许输入30个字)