如何在Zuse样式中将十进制浮点数转换为二进制数

时间:2019-02-04 15:39:47

标签: floating-point

我想构建Z3的副本,并且需要学习二进制到十进制以及十进制到二进制转换算法。

据说Z3中使用的算法是这样的。让我们以一个示例数字为例,例如5 * 10 ^4。因此,首先将5转换为二进制,因此我们得到0101并将其设置在尾数单位的第-13位。然后,我们在指数上加13以补偿输入的位置t。然后我们将尾数归一化。所以现在在指数中有1101,尾数为1.01。然后说,我们需要将尾数乘以指数指定的10倍。所以这将是1.01 * 10的四倍?

但这对我来说毫无意义。我们对其进行归一化,然后相乘?而且算法永远不会说指数是如何设置的?

1 个答案:

答案 0 :(得分:0)

根据Konrad Zuse’s Legacy: The Architecture of the Z1 and Z3第8页上的“处理器”,劳尔·罗哈斯(RaúlRojas)提出,Z3浮点单元在处理指数和寄存器的子单元中包含寄存器Aa,Ab,Ae和Af。 “ Ba”,“ Bb”,“ Be”和“ Bf”位于处理有效位数的子单元中。

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

指数寄存器包含7-8位,有效寄存器包含17-19位。位数的变化允许算术期间的中间结果。

(请注意文本中的错误:它说:“第二个移位器可以将Af中的有效位从右移到16个位置,向左移到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. 在这一点上,罗哈斯写道,有效数从Be转移到Ba并从Be转移到Bb。但是,他先前描述的移位器将Bf作为源而不是Be,因此要么省略了某些步骤,要么数字在中而不是在中,或者我错过了其他移位器。
  10. 假设数字在中,移位器用于在向左移1位(乘以2)的同时将Bf复制到Ba,并在向左移3位(乘以8的同时)将Bf复制到Ba )。然后使用图3中标为B的ALU将这两个有效位相加。未描述的其他操作必须处理归一化,包括指数调整。

罗哈斯提到负指数是通过乘以.1来处理的,但是省略了该乘法的细节。