规范化和非规范化浮点数

Normalised and denormalised floating points

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

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

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

  • b为固定基数(由格式决定的基数,不随表示值变化),
  • s是一个符号(+1或-1),
  • f 是以 b[=125 为基数的 p 位数字(称为有效数或分数) =](其中p是固定精度),
  • e是满足emine[的指数=125=] ≤ emax,其中 eminemax 是固定边界。

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

在第一种情况下,f可以显式写成∑i=0..p−1 fi • bi,其中f0,f1,依此类推就是f.

的数字

如果f0不为零,则数字为范式。如果 f0 为零,则数字的形式是 denormalized.

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

如果我们不能使第一个数字非零,因为 e 将小于 emin,这个数低于范式所能表示的数,所以说是subnormal。次正规的数 不能 归一化,因为它太小了。非正规化但不次正规化的形式的数字可以被正规化。

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

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 ,我们可以在不知道编码方式的情况下求出最小正规正数和最小正数