colorforth /mod 算法是如何工作的?
How does the colorforth /mod algorithm work?
我最近一直在看 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
实现了 nip 操作。我也理解混合循环和 if 组合。
这是我的不足之处。
- 似乎期望堆栈上有两个项目,分子和分母,这是有道理的。然而,最初的
for
将 TOS 推入 return 堆栈,只在 return 堆栈上留下一项。然而,over over
操作使用两个值,所以我不确定发生了什么。
- 他提到了减法,但没有发生反转,除了
- 2* -
分支,它已经被提到为 1 的移位。
- 我不确定如何通过仅移入 1 或 0(移入除数?)来一点一点地构建商。
一些想法:
- 也许这取决于 Chuck 正在编程的芯片的特定字长和添加足够次数后的翻转
- 可能缺少一个前导码会反转分母,导致在每个循环中都提到减法。
colorForth 和其他 Forth 之间的一些特性:
.
是 Chuck 芯片上用于计时目的的 nop。
-
是按位取反,而不是减法。
or
是独占或代替包含或
有关更多信息,来源如下:
Description of function and use of colorForth opcodes
仅供参考:关于此问题的 excellent answer 由 Ulrich Hoffmann post编辑于 comp.lang.forth。
请编辑此post使其更详细。
我最近一直在看 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
实现了 nip 操作。我也理解混合循环和 if 组合。
这是我的不足之处。
- 似乎期望堆栈上有两个项目,分子和分母,这是有道理的。然而,最初的
for
将 TOS 推入 return 堆栈,只在 return 堆栈上留下一项。然而,over over
操作使用两个值,所以我不确定发生了什么。 - 他提到了减法,但没有发生反转,除了
- 2* -
分支,它已经被提到为 1 的移位。 - 我不确定如何通过仅移入 1 或 0(移入除数?)来一点一点地构建商。
一些想法:
- 也许这取决于 Chuck 正在编程的芯片的特定字长和添加足够次数后的翻转
- 可能缺少一个前导码会反转分母,导致在每个循环中都提到减法。
colorForth 和其他 Forth 之间的一些特性:
.
是 Chuck 芯片上用于计时目的的 nop。-
是按位取反,而不是减法。or
是独占或代替包含或
有关更多信息,来源如下: Description of function and use of colorForth opcodes
仅供参考:关于此问题的 excellent answer 由 Ulrich Hoffmann post编辑于 comp.lang.forth。
请编辑此post使其更详细。