首页 >> 大全

IEEE754-2008 标准详解(一):浮点数据的分类

2023-10-18 大全 29 作者:考证青年

本文是对《C++语法详解》一书相关章节的增补,以增强读者对浮点数的理解,原书引用的是老版的 -1985 标准

《C++语法详解》网盘地址:

本文摘自本人所作《-2008标准详解》网盘地址

链接:

提取码:lzku

有兴趣的读者可参阅本人所著《C++语法详解》一书,电子工业出版社出版,该书语法示例短小精悍,对查阅C++知识点相当方便,并对语法原理进行了透彻、深入详细的讲解,可确保读者彻底弄懂C++的原理,彻底解惑C++,使其知其然更知其所以然。此书是一本全面了解C++不可多得的案头必备图书。

由于本人能力有限,文中难免有错漏之处,望广大读者指出更正,不胜感激

第1章 IEEE 754-2008对浮点数据的分类及基本概念

1、注:本文将IEEE 754 -2008简称为IEEE 754

2、实现:比如,想造一辆汽车,于是设计了方案A,然后根据方案A造出了汽车M,则汽车M就是方案A的实现,也可以说,汽车M实现了方案A。同理,-2008只是一个现论上的标准(类似于方案A),要使标准能真正成为现实,必须得有根据标准的实现,通常编译器会实现-2008中的标准,但不一定会实现所有标准。

1.1 格式

1、格式():数值( )和符号的表示法()的集合,可能伴有编码

2、在IEEE中有如下几种类型的格式

3)、整数格式:标准中未定义的一种格式,表示整数的子集,也可能是表示无穷大、NaN或负零的附加值( value)。

4)、交换格式( ):在标准中定义的具有特定的()固定宽度编码的格式。交换格式由它们的大小标识,可以用于实现之间交换浮点数据。可把交换格式理解为是一种编码后的格式。

5)、基本格式:指的是以下五种格式

3、五种基本格式可以被实现为受支持的交换格式或算术格式(见图XXX),若实现为交换格式则分别称其为二进制交换格式和十进制交换格式。

4、格式可理解为类型,因为编程语言如C++等,可通过类型来实现格式,如浮点格式可使用float、等类型来实现。因此

1.2 实数、浮点数、浮点数据

1、实数包括有理数和无理数,其中无理数是指无限不循环小数,如π,√2等。

2、由于计算机的存储容量有限,无限不循环小数、长度超过规定的有限小数都无法存储,因此,计算机处理的都是长度有限的实数,这些数被称为浮点数,所以,浮点数和实数是不同的,可把浮点数理解为是实数的近似,是实数的有限子集,浮点数通常在计算机中用于近似的表示任意某个实数。

3、浮点数的小数点在使用科学表示法(也称为指数表示法)时,可根据指数的不同而浮动,这是之所以被称为浮点数的原因。

4、由于浮点数是实数的近似,因此,浮点算术也是实算术的一种近似计算,因此,实算术的某些性质并不适用于浮点算术,如加法结合律。

5、在-2008中的浮点数是指的除了NaN之外的浮点数据,而浮点数据包括,

3)、有符号无穷大4)、NaN (not-a-,即,不是一个数),又分为

6、需要注意的是,中的0和无穷大都是有符号的。

1.3 浮点数据表示法及其值

1、IEEE 754-2008使用浮点数据表示法来表示浮点数据,使用浮点数据表示法表示的数是未编码的,浮点数据表示法包括以下内容:

2、浮点数据表示法与其所表示的值的区别

在IEEE 754中浮点数据表示法与其所表示的值是两个不同的概念,如,假设sign =1, = 5, = 2.34,基数b = 10,则以下三元组是IEEE 754的浮点数据表示法

	 (1, 5, 2.34)				//IEEE754浮点数据表示法

而以下形式表示的是浮点数据表示法的值

(−1)1× 105× 2.34 //浮点数据表示法的值

3、在IEEE 754中,NaN是浮点数据表示法的值,而qNaN或sNaN是浮点数据表示法

4、注意:本文不对“表示法”及其表示的值做严格的区分

5、图XXX是浮点数据的分类以及其表示法的总结

1.4 浮点格式表示的浮点数据范围

1、由于每一种格式的编码长度是有限的,这意味着,格式能表示的浮点数据的范围也是有限的,在特定格式中能表示的浮点数据的范围由基数、有效数的位数、指数的取值范围等限定。

2、-2008规定,每种格式都必须能表示以下浮点数据:

_浮点类型范围_浮点数据类型

3、公式3和公式4是公式2的一种简化形式,二者是等效的,可相互转换。使用两种形式表示法的主要目的在于在将浮点数进行编码时,使用不同的表示方法可以更方便的进行编码。二者的区别在于

4、公式3和公式4各参数意义如下:

这里的有效数可能与某些教材上使用的有效数有点区别,如1500 × 103 在中,其有效数为1500,而在其他地方有可能有效数则是指的15。因此,本文尽量使用尾数一词,以避免产生不必要的理解混乱。注:-2008不再使用尾数,而只使用有效数。注意:尾数m或c是没有符号的(因为符号是由s指定的),也就是说尾数总是一个正数。

4)、e和q是指数,其值是分别为位于

emin ≤ e ≤ emax //公式1.5

emin ≤ q+p − 1 ≤ emax //公式1.6

间的任何整数,其中,emax 是最大指数,emin是最小指数,且

  emin = 1−emax						//==公式1.7==

5)、可见,对于有限浮点数,公式3和公式4的关系如下

e = q+p − 1 //公式1.8

m = c × b1−p //公式1.9

6、图XXX为指数表示法的图示

7、注意:公式3和公式4表示的是编码之前的真实值,其参数e、q、c、m、p、emin、emax等都是编码之前的真实参数。表XXX列出了p和emax的取值范围

8、实数、浮点数据、浮点数据表示法、编码之间的关系

将实数转换为二进制位串的过程:通过舍入过程将实数映射为格式中包含的浮点数据,然后再将浮点数据映射到格式中的一种或多种浮点数据表示法,然后再通过编码将浮点数据表示法表示的浮点数据映射为位串。

1.5 规约数与非规约数

1、在特定格式中能表示的浮点数据的范围由基数、有效数的位数、指数的取值范围等限定。

2、以(−1)s × m × be 为例,由于

m = d0.d1 d2…dp−1

3、将以上所表示的浮点数据再次化分为规约数和非规约数。

需要注意的是,本文对规约数与非规约数的推导,其尾数是纯小数形式,而不是纯整数形式,也就是说,是以公式(−1)s × m × be 为准来推导的,而不是以公式 (−1)s × c × bq 来推导的

4、规约数及其范围

5、非规约数及其范围

6、规约数的判断方法

由于正规约数的取值范围为

b emin = 1.00…00× b emin (共p位尾数)

(b−b1−p) × b emax = (b−1).(b−1)(b−1)…(b−1) × bemax (共p位尾数)

从而可以推得,规约数必须同时满足以下两个条件(负规约数可推得相同的结论)

7、非规约数的判断方法

由于正非规约数的取值范围为

(1−b1−p) × b emin = 0.(b−1)(b−1)…(b−1) × b emin

b emin+1−p = 0.00.001× b emin

从而可以推得,非规约数必须同时满足以下两个条件(负非规约数可推得相同的结论)

8、注意:以上公式的参数取值取决于具体使用哪种编码方式,编码方式不同,其参数的值不同,所表示的规约数与非规约数范围就不相同。

9、表XXX为规约数与非规约数的总结

10、示例:对于计算机中常使用的float型浮点数,若使用二进制交换格式编码(详见后文)时,各参数取值如下:

b = 2,p = 24,emin = −126,emax = 127

由此可计算出,最小的正规约数为

b emin = 2−126 ≈1. ×10-38

最大的正规约数为

(b−b1−p) × b emax= (2−21−24) × 2 127 ≈ 3. ×10-38

最小的正非规约数为

b emin+1−p = 2^−126 + 1−24^ =2−149 ≈ 1. ×10-45

最大的正非规约数为

(1−b1−p) × b emin = (1−21−24) × 2 −126 ≈1. ×10-38

同理,可计算机负规约数与负非规约数的取值范围

通过以上计算可以看到,最小正规约数与最大正非规约数的大小是非常接近的。

float型浮点数二进制交换格式编码时的规约数和非规约数的范围如下表XXX所示

11、非规约数与规约数的区别

以下讲解均是指的正规约数和正非规约数,负数可根据以下规则同理推出

由前文讲解可知

1.6 NaN简介

1、NaN分为 Nan(简称sNaN)和quiet NaN(简称qNaN)

2、有效载荷():是指的编码在NaN末尾有效数字段的部分,通常包含NaN的诊断信息。注:“末尾有效数字段”详见后文。

1.7 舍入和属性

1、可以使用属性来描述某个对象的某些特性,如,“人”具有“身高”、“体重”、“年龄”等属性,也使用属性来描述某些特性。

2、总共包含以下几大类属性:

3、属性通常含有属性值,属性值可以是常量值,也可以是动态模式的值。

4、定义了如下的舍入方向属性(- )

5、有关舍入属性的要求及规则

6、舍入方向属性与0的符号

1.8 为便于讲解本文引入如下规定及概念

1、本文将形如(−1)sign× × 的表示法称为指数表示法

2、对数字的表示本文使用下标的形式表示该数的基数,若无特别说明均是指十进制数,如

1. //一个二进制数

1. //一个十进制数

1. //一个16进制数

3、本文尽量不使用浮点数据的三元组表示法,而使用指数表示法

4、本文对于NaN与qNaN、sNaN的区别不作严格区分,也不对浮点数据表示法及其值作严格的区分。

5、本文将未编码的浮点数据称为真实浮点数据或真实数据,其相应参数被称为真实参数,如指数e称为真实指数

6、在计算机中浮点数通常分为单精度(float型)和双精度(型),float型通常使用32位存储,使用64位存储,本文重点以float型(32位)为示例进行讲解。

7、本文将有效数通常称为尾数,这样做的目的,主要是更方便理解,但-2008并不称其为尾数。

8、英文单词的重点区别

需要重点区分bit(位)与digit(位数)的区别,bit重点强制二进制数的位数(即比特位),而digit重点强调十进制数的位数。如,有效数位( bit),可理解为“尾数位(指比特位)”,为表述准确,也可译为“有效数比特位”;而有效数位数( digit),重点强调的是十进制数的位数,可理解为“尾数位数(指十进制数的位数)”,本文在易引起混淆的地方,会注明英文单词。

作者:黄邦勇帅(原名:黄勇) 2021年11月28日

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了