2

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 がどのように機能するかについてはわかりません。

実装の何が問題になっていますか?

4

2 に答える 2

1

Gforth の浮動小数点スタックの使い方がわからないので答えられませんが、ループを使用する代わりに、次のように累乗を定義する Pascal プログラミングのトリックを使用できます。

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

注...詳細については、実数の累乗に関する質問からのこの回答を参照してください。

于 2014-03-05T00:06:32.520 に答える