【问题标题】:Floating point number calculation using a 32 bit word使用 32 位字计算浮点数
【发布时间】:2019-09-05 03:04:00
【问题描述】:

我正在阅读 Patterson 的计算机组织第五版书,我对这两页文字感到困惑。第一页:

第一个单词是否等于十进制的 0.5?我看到符号为 0,指数为 -1,小数为 0,有效数中隐含 1。所以 1.0_two * 2^-1 = 0.5?对吗?

为什么 1.0 * 2^1 是“较小的二进制数?”。第二个字不是更大吗?它的符号为 0,指数为 1,有效数为隐含的 1 = 1.0 * 2^1 = 2?对吗?

我不明白上面写着的段落:

因此,理想的符号必须将最负的指数表示为 00 ... 00_two,将最正的指数表示为 11 ... 11_two。这种约定称为偏差表示法,偏差是从正常的无符号表示中减去的数字,以确定实际值。

【问题讨论】:

  • 您的困惑是由于文本中的一些不幸的措辞和布局造成的。这意味着不是“值 X 想要更小的二进制数”而是“值 X 想要更小的二进制数 Y”,其中 Y 是下图中的数字。该图是句子的一部分。
  • 我计算的数字对吗?

标签: floating-point computer-science


【解决方案1】:

如果你把它们看成二进制数,第一个是 0x7f800000 而第二个是 0x00800000,所以第二个是一个更小的二进制数,尽管它代表一个 更大的 em> 浮点数。所以使用二进制比较或排序会做错事。

因此使用了指数的有偏表示,这意味着 0.5 的二进制值是 0x3f000000,而 2.0 的二进制值是 0x40000000,二进制比较“有效”用于比较和排序浮点数。

问题在于这仍然是符号+幅度表示,因此您需要符号+幅度二进制比较,而大多数硬件使用 2s-complement。所以你最终还是需要特殊的浮点比较指令/硬件。

【讨论】:

  • I'm sorry 0x7f800000 是什么意思?
  • 位 01111111100000000000000000000000 的二进制序列。这可以表示浮点数或整数,具体取决于您如何解释各个位。
猜你喜欢
  • 2012-03-13
  • 2020-09-04
  • 2011-12-14
  • 1970-01-01
  • 2013-06-07
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多