跳转到内容

实数:规范化

来自维基教科书,开放的书籍,为开放的世界

论文 2 - ⇑ 数据表示基础 ⇑

← 浮点数 浮点规范化 浮点误差 →


在存储数字时,我们需要以最有效的方式使用给定的空间。例如,如果我们取一个十进制浮点数,例如

  (Planck's constant)

如果我们将它重写为

  (Planck's constant)

那么你可以看到表示法多占了 2 个字符,即两个额外的 0,即使它代表的是完全相同的数字。当你不担心数字占用多少字符时,这可能是可以接受的,但在二进制和有限的计算机内存中,数字占用的空间非常重要。我们需要尽可能高效的表示法。在给定的位数内,数字的规范化表示将以可能的最高精度显示数字。总之,规范化数字

  • 只给出数字的一种表示。
  • 节省空间。
  • 在给定的位数内给出数字最精确的表示。

一般来说:当处理二进制浮点数时,必须确保前两位不同。也就是说



绝对



让我们看一个例子。取一个二进制浮点数


我们可以看到这个数字以 开头。我们需要将它更改为 才能使它规范化。为此,我们需要将小数点向右移动一位,为了保留未规范化数字所代表的相同数字,我们需要相应地更改指数。将小数点向右移动一位来规范化数字,我们需要将指数更改为向左移动一位以进行补偿。因此从当前指数中减去一


为了确保你已正确规范化,请检查


让我们尝试一个更复杂的例子


为了使尾数规范化,我们需要将小数点向右移动两位。为了保持与原始浮点数相同的数值,我们需要将指数调整为小两位。


现在检查新的规范化值是否与原始值相同。

总结:规范化数字
  1. 规范化左侧(尾数)。
  2. 记录它规范化所需要的“弹跳”次数。
  3. 使用以下公式计算规范化数字的指数:原始指数 – “弹跳”
  • 规范化数字以两个不同的位开头。
  • 确保规范化不会改变尾数的符号。
  • 规范化在给定的位数内提供了最大精度。
  • 规范化确保每个数字只有一个表示
练习:规范化问题

以下数字是否规范化?

0.010000000 111111

答案

否,因为它以 0.0 开头

0.111111000 111111

答案

是,因为它以 0.1 开头

1.100000010 111111

答案

否,因为它以 1.1 开头

规范化以下数字

0 010000000 111111

答案

  1. 0.010000000 111111 -> 00.10000000 111111
  2. 向右移动一位
  3. 111111 - 1 = -1 -1 = -2 = 000010 (+2) = 111110 (-2)
00.10000000 111110 = 0.100000000 111110

0 001101000 000110

答案

  1. 0.001101000 000110 -> 000.1101000 000110
  2. 向右移动两位
  3. 000110 - 2 = 6 - 2 = 4 = 000100 (+4)
000.1101000 000100 = 0.110100000 000100

1 111111010 000011

答案

  1. 1.111111010 000011 -> 1111111.010 000011
  2. 向右移动六位
  3. 000011 - 6 = 3 - 6 = -3 = 111101 (-3)
111111.010 111101 = 1.01000000 111101
华夏公益教科书