在 IEEE 754 32 位 base-2 浮点系统中可以编码多少个不同的值? [复制]

Posted

技术标签:

【中文标题】在 IEEE 754 32 位 base-2 浮点系统中可以编码多少个不同的值? [复制]【英文标题】:How many different values can be encoded in IEEE 754 32-bit base-2 floating-point system? [duplicate] 【发布时间】:2019-10-17 23:47:07 【问题描述】:

wikipedia page 声明“IEEE 754 32 位 base-2 浮点变量的最大值为 (2 − 2^−23) × 2^127 ≈ 3.4028235 × 10^38”。

    在那个数字中,是否包括 +∞、-∞ 和 NaN? “(2 − 2^−23)”中的 2 是什么? 为什么 2^127 中有 127?

【问题讨论】:

***.com/a/12560672/270986 可能有用吗?但这听起来好像您将两个不同的东西混为一谈:(1)不同的可表示值(特定类型)的数量,这是您的标题所指的,以及(2)最大可表示的有限值,这是您的题体所指。你问的是哪一个? 可能重复:***.com/q/24369558/270986 【参考方案1】:

在那个数字中,是否包括 +∞、-∞ 和 NaN?

不,它们是特殊的“数字”

“(2 − 2^−23)”中的 2 是什么?

最大的尾数是 1.11111....111,这个值等于 2 − 2^−23。如果将其添加到 ULP (2^-23),您将获得 2.0

为什么 2^127 中有 127?

这是基于单精度浮点数的编码方式。指数有8位编码,实际指数编码为数字的指数加127。最大的指数代码是 254(因为 255 用于 NaN),数字的最大指数是 254-127=127。

在所有 IEEE 754 代码中,如果指数编码在 k 位上,则最大指数为 2^(2^(k-1)-1)

【讨论】:

【参考方案2】:

当您查看IEEE-754 binary32 的位模式时

然后您会看到有 2 32 个可能的位组合。所有这些都可能代表一个浮点数。但是,从这些组合中,有一些具有特殊的含义。这些是指数由11111111 给出的组合。这些组合中的任何一个都代表NaNInf。总共有 2 32 − 8 = 2 24 个这样的组合。此外,由于符号位,数字零表示为-0+0。所以简而言之,binary32 浮点数的总数由下式给出:

232 - 224 - 1 = 4 278 190 079

图片取自Wikipedia

【讨论】:

我不明白这个答案的“2^(32-24) = 2^26”位:2^(32-24) 不等于 2^26。有 2^24 位模式表示无穷大或 NaN(或进一步细分,有 2 个无穷大、2^23 - 2 个信号 NaN 位模式和 2^23 个安静 NaN 位模式)。 @MarkDickinson 是的……那是大脑疲劳的时刻;-)。我现在已经更新了答案。【参考方案3】:

您在这里问了两个问题。请注意,“可以编码多少个不同的值”与最小值和最大值之间存在差异。

值的数量很容易计算。在 32 位中,您可以有 2^32 或 4,294,967,296 个值。

“但是”,我听到你说,“10^38 大于 2^32!”。是的,它是,这是因为浮点编码实际上无法编码其范围内的所有整数。

【讨论】:

以上是关于在 IEEE 754 32 位 base-2 浮点系统中可以编码多少个不同的值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

IEEE 754的简介

用python从二进制文件中读取32位带符号的ieee 754浮点?

IEEE-754浮点标准简介

无法分离 ieee 754 浮点的不同部分

如何解释尾数中的隐藏位? MIPS 代码 IEEE-754

从 IEEE 754-2008 十进制浮点数据转换为二进制浮点格式