colorForth/mod算法是如何工作的



我最近一直在研究Chuck Moore的colorForth,我发现了以下代码片段(以传统语法呈现(:

: /mod for begin over over . + -if drop 2* [ swap ] next ; then over or or - 2* - next ;

以下解释:

Divide operation: trial subtract and shift in either 0 or 1

我真的很困惑这是如何实现全除法运算的。我意识到2*在0中移动,- 2* -在1中移动,并且over or or实现了夹持操作。我也理解混合循环和if组合。

这就是我的不足之处。

  1. 它似乎期望堆栈上有两个项,分子和分母,这是有道理的。但是,初始for将TOS推送到返回堆栈,在返回堆栈上只留下一个项。然而,over over操作在存在两个值的情况下工作,所以我不确定发生了什么
  2. 他提到了减法,但除了- 2* -分支之外,没有发生反转,它已经被提到在1中移位
  3. 我不知道你如何通过只在1或0中移动(到除数中?(来一点一点地构造商

一些想法:

  1. 也许这取决于Chuck编程的芯片的特定字大小以及添加足够次数后的滚动
  2. 也许缺少了一个反转分母的前导码,导致每个循环中都提到了减法

colorForth和其他Forth之间的一些特质:

  • .是Chuck芯片上用于定时目的的nop
  • -是按位反转,而不是减法
  • or是互斥的或不是包含的或

有关其他信息,请参阅来源:colorForth操作码的功能和使用说明

仅供参考:Ulrich Hoffmann在comp.lang.forth上发布了这个问题的精彩答案。


请编辑此帖子以使其更加详细。

相关内容

  • 没有找到相关文章

最新更新