首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Zuse样式中将十进制浮点转换为二进制

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

Stack Overflow用户
提问于 2019-02-04 23:39:47
回答 1查看 63关注 0票数 0

我想建立一个Z3的复制品,我需要在二进制到十进制和十进制到二进制转换算法的教育。

Z3中使用的算法应该是这样的。让我们举个例子,比如5*10^4,所以首先我们把5转换成二进制,所以我们有0101,我们把它设置在尾数单位的第13位。然后我们在指数上加13来补偿我们输入的位置t。然后我们将尾数归一化。现在指数是1101,尾数是1.01。然后它说我们需要将尾数乘以10,就像指数所指示的一样多。所以这将是1.01 * 10的四次?

但这对我来说毫无意义。我们对它进行了标准化,现在是乘法吗?算法也不会说指数实际上是如何设置的?

EN

回答 1

Stack Overflow用户

发布于 2019-02-05 08:07:02

根据Raúl Rojas的《the Processor》从的第8页开始,Z3浮点单元在处理指数的子单元中包含寄存器Aa、Ab、Ae和Af,在处理有效数的子单元中包含寄存器Ba、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. 浮点单元是以某种我看不到的方式初始化的。RF,可能被初始化为表示值0(指数−64,任何有效数)。我将继续这个assumption.
  3. 设置为表示有效数字的一个位数的值。该数字的位被复制到Ba的位−10至−13中。( Ba的位似乎是从0到−18.)
  4. According到Rojas,Ba是乘以10。我认为这是通过“微码”完成的,它控制浮点单元内的各种继电器,但没有充分研究论文。
  5. Rojas告诉我们,对于剩余的三位十进制数重复步骤3和4,但这肯定是一个不完整的描述,因为Ba的位−10到−13仍然包含乘以10的数据,因此新数字不能简单地存储在这些位中;要么必须添加到Ba,要么产品必须在其他地方生产,并将其添加到新数字。更详细地阅读这篇论文可能会通过揭示哪些电路可用于执行此addition.
  6. When来阐明这一点。以上是完整的,我们有以Ba为二进制编码的十进制有效数。我怀疑这包括位0中的显式前导比特,对于小于8,192的数字为0,对于8,192或更大的数字为1。在前一种情况下,Aa中的数字不是normalized.
  7. The指数,也必须被初始化。我怀疑它被设置为13,所以当十进制指数的integer.
  8. Processing使用整个浮点单位时,现在正确地表示了小数有效。在准备好中的小数有效位后,将其移动到。对于非负指数e,数字乘以10倍e。
  9. 在这一点上,罗哈斯写道,有效数字从Be移位到Ba,从Be移位到Bb。然而,他之前描述的移位器具有Bf作为源,而不是Be,因此或者省略了某个步骤,或者数字在而不是中,或者有额外的移位器。数字在中,移位器用于在向左移位1比特(乘以2)的同时复制Bf到Ba,并且在向左移位3比特(其乘以8)的同时复制Bf到Ba。然后使用图3中标记为B的算术逻辑单元将这两个有效数相加。未描述的其他操作必须处理标准化,包括指数调整。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54519516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档