我想构建Z3的副本,并且需要学习二进制到十进制以及十进制到二进制转换算法。
据说Z3中使用的算法是这样的。让我们以一个示例数字为例,例如5 * 10 ^4。因此,首先将5转换为二进制,因此我们得到0101并将其设置在尾数单位的第-13位。然后,我们在指数上加13以补偿输入的位置t。然后我们将尾数归一化。所以现在在指数中有1101,尾数为1.01。然后说,我们需要将尾数乘以指数指定的10倍。所以这将是1.01 * 10的四倍?
但这对我来说毫无意义。我们对其进行归一化,然后相乘?而且算法永远不会说指数是如何设置的?
答案 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”位于处理有效位数的子单元中。
这对寄存器
指数寄存器包含7-8位,有效寄存器包含17-19位。位数的变化允许算术期间的中间结果。
(请注意文本中的错误:它说:“第二个移位器可以将Af中的有效位从右移到16个位置,向左移到15个位置。”但是,由于Af只有7位,则必须要有另一个寄存器。如前面的句子所示,有一个具有输入Bf和输出Ba的移位器,另一个有输入Bf和输出Bb的移位器,我希望有Bf-to-Bb移位器。)
从第13页开始的“读取和显示指令”告诉我们如何将十进制输入转换为二进制浮点数。它似乎缺少一些步骤,但我的解释是:
罗哈斯提到负指数是通过乘以.1来处理的,但是省略了该乘法的细节。