规范化和非规范化浮点数

时间:2021-03-15 18:20:03

标签: floating-point eps

我不明白为什么非规范化数字总是小于规范化数字。我记得标准化只是意味着我们在逗号之前只有一位与零不同的数字(例如 1.110)。例如,假设我有一个 16 位精度的浮动系统,那么指数有 5 位,尾数 10 加上隐藏位。偏差是 15。如果我想取最小可能的数字,我有 1 - 15 = -14 作为指数(因为 0 是保留的)。那么归一化的最小数是 2^(-14),但非归一化的数是将归一化的最小数乘以 epsilon 机器计算的,即 2^(-14)*2^(-10)。我不明白为什么我们将最小值乘以 epsilon 机器,以及为什么将其视为非规范化数字。 谢谢

2 个答案:

答案 0 :(得分:3)

有限数的浮点表示是 sfbe ,其中:

  • b 是固定基数(由格式决定的基数,不随表示的值而变化),
  • s 是一个符号(+1 或 -1),
  • f 是以 b 为底的 p 位数字(称为有效数或分数)(其中 p 是固定精度),
  • e 是满足 eminee< sub>max,其中 eminemax 是固定边界。

f 通常被描述为 p 位数字,在第一个数字后带有小数点或“小数点”,例如 1.011 或作为 p-digit 没有小数点的整数,或者等效地,在所有数字后面有一个小数指针,例如 1011。当 e 针对它们之间的差异进行调整时,这些是完全等效的,< em>p−1 位数,同时调整 eminemax。< /p>

在第一种情况下,f 可以明确写成 ∑i=0..p−1 fi • bi,其中 f0f1等都是f的数字。

如果f0 不为零,则数字为标准形式。如果 f0 为零,则数字的形式是非规范化

如果e > emin,我们可以用f代替fb 并将e 替换为e−1,这些新值将代表相同的数字。如果新的第一个数字仍然为零,但是 e 足够大并且不是所有数字都为零,那么我们重复此操作,直到我们得到第一个不为零的数字。这称为规范化。

如果由于 e 将小于 emin 而不能使第一位非零,则该数字低于可以用范式表示,所以说它是次范式。一个次正规数不能被标准化,因为它太小了。非规范化形式的数字可以规范化。

过去,denormal 用于指代次正规数。但是,为了清楚起见,我们区分了这些词。次正规数总是比正规数小,因为次正规的定义是它太小而不能用正规形式表示。但是,非规范化形式可能比规范化形式大,这仅仅是因为它们具有更大的指数,足以弥补分数的差异。

IEEE-754 二进制格式不允许在其二进制编码中使用非规范化数字。 IEEE-754 十进制格式可以,非 IEEE-754 格式也可以。

在您描述的 16 位格式中,b 为 2,p 为 11,emin是-14,emax是15。最小正数的指数是-14,有效数是1.00000000002,所以它的形式是+ 1 • 1.00000000002 • 2−14,表示值 2−14

最小正数的指数为-14,有效数为0.00000000012,因此其形式为+1 • 0.00000000012 • 2-14 ,表示值 2-10 • 2-14 = 2-24。出现 2-10 是因为 1 位数字相对于 f 的开头。

请注意,以上所有内容都纯粹是根据浮点表示的形式定义的。未提及对浮点表示进行编码的位,这些位是无关紧要的。我们使用 15 的偏差对指数进行编码,或者我们可以将有效数大部分编码为 10 位,其中一位是从指数字段确定的,这些事实是无关紧要的。一旦我们知道 bpemin,我们就可以计算出最小的正数和对编码方法一无所知的最小正数。

答案 1 :(得分:1)

许多系统规范化所有浮点数,除了那些太小而无法以规范化格式表示的浮点数。愿意接受一点精度损失的系统可以允许任何可以用标准化格式表示的数字,除了那些具有最大指数的数字,也可以用非标准化格式表示。这可以提高涉及重复加法和/或减法的任务的性能,但我不知道有任何系统能够真正做到这一点。

相关问题