负零和正零是非规范化的吗?

Posted

技术标签:

【中文标题】负零和正零是非规范化的吗?【英文标题】:Are Negative Zero And Positive Zero Denormalized? 【发布时间】:2015-03-23 03:26:41 【问题描述】:

我的教授复习了一个练习期末考试题,我们正在使用 IEEE 浮点格式。二进制是 5 位表示,在其中一种情况下,我们使用减零。每个表示有 1 个符号位、3 个指数位和 1 个小数位。

他认为它具有 1 0000 的二进制表示,我理解。有效数 M 为 0,我理解这是因为非规范化值具有有效数 M = f = 0,因为分数字段为 0。

但是,他将指数值 E 设为 -3​​。

这个,我不明白。我认为负 0 是非规范化的!我的书说

"当指数字段全为零时,表示的数为非规范化形式。此时,指数值为 E = 1 − Bias,有效数字值为 M = f ,即没有隐含前导 1 的分数字段。”

由于负 0 是非规格化的,E 应该等于 1 - 3(偏差)= -2,对吗?

在我的书中,具有 4 个指数位、3 个小数位和偏置 7 (2^4 -1) 的 IEEE 8 位浮点格式的正 0 的指数值 E 为 -6,这是正确的因为 E = 1 - 7 (偏差) 因为它是非规范化的。

为什么在这种情况下会有所不同?还是我的教授弄错了?

【问题讨论】:

【参考方案1】:

零使用与非正规数相同的指数,并且像它们一样在其表示被解码时没有前导 1 位。如果您愿意,您可以将其称为“非正规”,但请注意其他人可能会在更严格的意义上使用该词(即考虑 0 和非正规浮点数的不相交类)。

至于-3,在指数的有偏和无偏版本之间转换时,可能是偏差值的错误。不要读太多。重要的是要记住,非正规的指数表示为“所有位为零”,并且是它可以具有的值范围中的最小可能值。

【讨论】:

我看不出规范化的概念是如何应用于零的。所以在我的想法中(25 年构建基于 IEEE-754 的库和处理器的经验),零既不是规范化的,也不是非规范化的。因此,我会将它们归入自己的类别。 @njuffa:在可以容纳不带“隐含 1”的浮点值的系统中,正零和负零只是尾数为零但在其他方面无异常的值。一些系统不能容纳任何没有“隐含 1”的浮点值,在这些系统中,有必要对零进行特殊处理。 @supercat:我使用过 IEEE-754 格式,尾数有或没有隐含的前导“1”、VAX 浮点格式、Microsoft 浮点格式、Turbo-Pascal 浮点格式等等。据我所知,在这些中,归一化的概念在应用于零时没有任何意义,在零操作数中根本没有可以归一化或非归一化的东西。 @njuffa:在没有前导“1”的格式中,零尾数意味着零值。在 IEEE-754 单精度和双精度格式中,只有一个指数值不需要前导“1”,这反过来意味着只有一个正零和一个负零。如果系统使用类似 80 位格式(没有隐含的前导“1”)并在加法/减法之后懒惰地规范化值(如果具有慢速移位指令的处理器正在计算 16777219-16777218+16777217,那么规范化第一个差异不仅会浪费时间,但会... @dashesy 我不知道这个问题在被问及回答两年后试图达到什么目的。当然,您没有将答案解读为采取强硬立场,即零应该被视为不正常?如果您正在向可能采取这种立场的其他人发表讲话,那么在这里向他们传达信息是一个糟糕的地方:与我不同,他们不会收到通知。

以上是关于负零和正零是非规范化的吗?的主要内容,如果未能解决你的问题,请参考以下文章

Math.abs()方法 取绝对值

ES6 - Object.is()

在IEEE754中阶码E=e+127,与阶码用移码表示不一样啊?

什么是非规范化 mysql 数据库的好方法?

Java学习02 (第一遍)

Math - Math.sign()