g在福斯中实现幂

  • 本文关键字:实现 forth gforth
  • 更新时间 :
  • 英文 :


我正在使用Gforth来尝试实现幂。从理论上讲,我理解基于堆栈的语言应该如何操作。但是,我在 Gforth 上实现它时遇到了困难。

这是我现在拥有的:

: myexp
    1 swap ?do rot dup * rot rot loop ;

但是,当我运行它时,我看到一个堆栈下溢,如下所示:

3 2 myexp
:1: Stack underflow
3 2 >>>myexp<<<
Backtrace:
$7F645EFD6EF0 rot
$2
$1

Gforth的循环结构在循环时是否在操纵堆栈?

我对 Forth 的工作原理一无所知,因为我在网上看到的大多数循环示例都相当复杂,并且让刚接触 Forth 的人感到困惑。

我的实现有什么问题?

  • 1 swap是错误的。 ?do希望下限位于叠。
  • loop身体是错误的。 这两个边界将从数据堆栈中删除,因此使用 rot 访问幂基不起作用。
: myexp ( u1 u2 -- u3 )  u3 = u1^u2
   over swap 1 ?do over * loop nip ;

我不确定如何使用 Gforth 的浮点堆栈,所以我不能给你答案,但您可以使用定义幂的 Pascal 编程技巧,而不是使用循环,如下所示:

x^y = exp(y*ln(x))

注意。。。有关更多信息,请参阅实数幂问题中的此答案。

相关内容

  • 没有找到相关文章

最新更新