使用局部变量的第四个浮点计算
Forth floating point calculation with local variables
在 Forth 中,可以使用单独的浮点堆栈进行除法和乘法。计算 3/4 的典型例子是:
3.e 4.e f/ f.
0.75 ok
即 0.75。但是,如果在使用局部变量的单词内完成计算,会发生什么情况?
: calc { a b }
a b f/ f.
;
3.e 4.e calc
:2: Stack underflow
3.e 4.e >>>calc<<<
Backtrace:
FDF1C7C1220 >l
看起来,Forth 期望整数堆栈中的值是空的,因为在函数调用之前,变量被放入浮动堆栈。问题是如何以某种方式修改calc-word,使局部变量从浮点堆栈中获取?
您可以使用 F:
类型说明符将变量指定为浮点型。
: calc { F: a F: b }
a b f/ f.
;
3.e 4.e calc \ => 0.75 ok
详见gforth手册section 5.21.1
在 Forth 中,可以使用单独的浮点堆栈进行除法和乘法。计算 3/4 的典型例子是:
3.e 4.e f/ f.
0.75 ok
即 0.75。但是,如果在使用局部变量的单词内完成计算,会发生什么情况?
: calc { a b }
a b f/ f.
;
3.e 4.e calc
:2: Stack underflow
3.e 4.e >>>calc<<<
Backtrace:
FDF1C7C1220 >l
看起来,Forth 期望整数堆栈中的值是空的,因为在函数调用之前,变量被放入浮动堆栈。问题是如何以某种方式修改calc-word,使局部变量从浮点堆栈中获取?
您可以使用 F:
类型说明符将变量指定为浮点型。
: calc { F: a F: b }
a b f/ f.
;
3.e 4.e calc \ => 0.75 ok
详见gforth手册section 5.21.1