【问题标题】:How to convert decimal floating point to binary in Zuse style如何以 Zuse 风格将十进制浮点数转换为二进制数
【发布时间】:2019-02-05 08:07:02
【问题描述】:

我想构建 Z3 的复制品,我需要接受有关二进制到十进制和十进制到二进制转换算法的培训。

Z3中使用的算法据说是这样的。让我们举个例子,比如 5 * 10 ^ 4。所以首先我们将 5 转换为二进制,所以我们有 0101,我们将它设置在尾数单元的 -13 位。然后我们将 13 添加到指数以补偿我们输入它的位置 t。然后我们规范化尾数。所以现在在指数中我们有 1101 和尾数 1.01。然后它说我们需要将尾数乘以指数指定的 10 倍。所以这将是 1.01 * 10 的四倍?

但这对我来说毫无意义。我们把它归一化,然后相乘?而且算法从来没有说指数是如何实际设置的?

【问题讨论】:

  • 在我看来,描述算法的语言的解释存在问题。您应该向我们展示您所指的文件。
  • @EricPostpischil 输入的十进制指数是什么意思?
  • 我认为从第 13 页开始的“读取和显示说明”部分中解释十进制输入的描述省略了一些步骤。我看不到它在哪里讨论了此操作的浮点寄存器的初始化。我怀疑指数 Ab 和有效数字 Bb 设置为表示值为零(因此 Ab 设置为 -64),而指数 Aa 设置为表示 2^0 的比例(因此 Aa 设置为 0)。然后将输入的十进制数字写入 Ba,并执行加法。然后执行乘以 10,然后将下一个输入数字写入 Ba,以此类推。
  • 归一化内置于加法和乘法中。处理完四位数字后,有效数字就完成了,并且 (Ab, Bb) 包含一个表示有效数字的浮点数。如果 e 为非负数或 0.1 | 则乘以 10 e 倍处理十进制指数 e e |如果 e 为负数。 (指数 e 是通过按下机器上的输入按钮来设置的。)

标签: floating-point


【解决方案1】:

根据 Raúl Rojas 从Konrad Zuse’s Legacy: The Architecture of the Z1 and Z3 第 8 页开始的“处理器”,Z3 浮点单元在处理指数和寄存器 Ba 的子单元中包含寄存器 Aa、Ab、Ae 和 Af,处理有效数字的子单元中的 Bb、Be 和 Bf。

这对寄存器构成一个浮点寄存器R1,构成一个寄存器R2。

指数寄存器包含 7-8 位,有效位寄存器包含 17-19 位。不同的位数允许在算术过程中产生中间结果。

(请注意文本中的一个错误:它说“第二个移位器可以将 Af 中的有效数字从 1 到 16 个位置向右移动,从 1 到 15 个位置向左移动。”但是,由于 Af 只有 7 位, 必须使用另一个寄存器。由于前面的句子表明有一个带有输入 Bf 和输出 Ba 的移位器以及另一个带有输入 Bf 和输出 Bb 的移位器,我希望 Bf-to-Bb 移位器是预期的。)

从第 13 页开始的“读取和显示说明”告诉我们如何将十进制输入转换为二进制浮点。它似乎缺少一些步骤,但我的解释是:

  1. 用户在 Z 键盘上设置四位十进制有效位,在 K 键盘或按钮上设置从 -8 到 +8 的指数。
  2. 浮点单元以某种我看不到的 Rojas 描述的方式初始化。可能 RF, 被初始化为表示值零(指数 -64,任何有效数)。我将继续这个假设。
  3. 设置为表示有效数字的一位数字的值。数字的位被复制到 Ba 的位 -10 到 -13 中。 (Ba 的位似乎从 0 到 -18 编号。)
  4. 根据 Rojas 的说法,Ba 乘以 10。我认为这是通过控制浮点单元内的各种继电器的“微代码”完成的,但尚未完全研究论文。
  5. Rojas 告诉我们步骤 3 和 4 对剩余的三个十进制数字重复,但这一定是不完整的描述,因为 Ba 的 -10 到 -13 位仍然包含乘以 10 的数据,因此新数字不能简单地存储在这些位中;要么它必须添加到 Ba,要么该产品必须在其他地方生产,它将添加到新数字。更详细地阅读该论文可能会通过揭示哪些电路可用于执行此添加来阐明这一点。
  6. 完成上述操作后,我们就有了在 Ba 中以二进制编码的十进制有效位。我怀疑这包括位 0 中的显式前导位,对于小于 8,192 的数字为 0,对于 8,192 及更大的数字为 1。在前一种情况下,数字未标准化。
  7. Aa 中的指数也必须已初始化。我怀疑它设置为 13,因此 现在可以正确地将小数表示为整数。
  8. 十进制指数的处理使用整个浮点单元。在 中准备好十进制有效数后的某个时刻,它被移动到 。对于非负指数 e,该数字乘以十 e 倍。
  9. 此时,Rojas 写道,有效数字从 Be 转移到 Ba,从 Be 转移到 Bb。但是,他之前描述的移位器以 Bf 作为源,而不是 Be,所以要么省略了某些步骤,要么数字在 而不是 中,或者我错过了其他移位器.
  10. 假设数字在 中,移位器用于在左移 1 位(乘以 2)时将 Bf 复制到 Ba,并在左移 3 位(乘以 8)时将 Bf 复制到 Ba )。然后使用图 3 中标记为 B 的 ALU 添加这两个有效数字。未描述的其他操作必须处理归一化,包括指数调整。

Rojas 提到负指数通过乘以 0.1 来处理,但省略了乘法的细节。

【讨论】:

  • 那么例如,对于 5 * 10 ^ 4?好的,您通过乘以 10 并相加将 0005 转换为十进制,对吗?所以现在我们在 -13 位置有 0101。然后我们将其归一化为 1.01 并将 13 添加到指数。那么,你会用 4 做什么呢?
  • @YinXuanYang:答案中的第 9 项和第 10 项描述了指数的处理。数字被移动到 Af:Bf,移位器移动 2 倍的数字到 Aa:Ba 和 8 倍的数字到 Ab:Bb。然后将它们相加,在 Ae:Be 中产生结果。然后将该结果移入 Af:Bf,并重复该过程 e 次。
  • 但是指数是“A”,我如何首先得到指数?
  • 4会放在A面,但是由于是十进制转二进制,所以需要修改,虽然不知道应该怎么做
  • 寄存器无论如何都没有初始化,事实上,它们在每条指令之后都会被清除,所以这里缺少什么?
猜你喜欢
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
  • 2014-03-01
  • 2016-12-25
  • 2015-10-11
相关资源
最近更新 更多