82 lines
2.1 KiB
Go
82 lines
2.1 KiB
Go
|
package postscript
|
||
|
|
||
|
import (
|
||
|
"math"
|
||
|
)
|
||
|
// begin Primitive Operator implementation
|
||
|
|
||
|
|
||
|
func add(interpreter *Interpreter) {
|
||
|
f2 := interpreter.PopFloat()
|
||
|
f1 := interpreter.PopFloat()
|
||
|
interpreter.Push(f1 + f2)
|
||
|
}
|
||
|
|
||
|
func sub(interpreter *Interpreter) {
|
||
|
f2 := interpreter.PopFloat()
|
||
|
f1 := interpreter.PopFloat()
|
||
|
interpreter.Push(f1 - f2)
|
||
|
}
|
||
|
|
||
|
func div(interpreter *Interpreter) {
|
||
|
f2 := interpreter.PopFloat()
|
||
|
f1 := interpreter.PopFloat()
|
||
|
interpreter.Push(f1 / f2)
|
||
|
}
|
||
|
func mul(interpreter *Interpreter) {
|
||
|
f2 := interpreter.PopFloat()
|
||
|
f1 := interpreter.PopFloat()
|
||
|
interpreter.Push(f1 * f2)
|
||
|
}
|
||
|
|
||
|
func sqrt(interpreter *Interpreter) {
|
||
|
f := interpreter.PopFloat()
|
||
|
interpreter.Push(float(math.Sqrt(float64(f))))
|
||
|
}
|
||
|
|
||
|
func atan(interpreter *Interpreter) {
|
||
|
den := interpreter.PopFloat()
|
||
|
num := interpreter.PopFloat()
|
||
|
interpreter.Push(float(math.Atan2(float64(num), float64(den))) * (180.0 / math.Pi))
|
||
|
}
|
||
|
|
||
|
func cos(interpreter *Interpreter) {
|
||
|
a := interpreter.PopFloat()
|
||
|
interpreter.Push(float(math.Cos(float64(a))) * (180.0 / math.Pi))
|
||
|
}
|
||
|
|
||
|
func sin(interpreter *Interpreter) {
|
||
|
a := interpreter.PopFloat()
|
||
|
interpreter.Push(float(math.Sin(float64(a))) * (180.0 / math.Pi))
|
||
|
}
|
||
|
|
||
|
func neg(interpreter *Interpreter) {
|
||
|
f := interpreter.PopFloat()
|
||
|
interpreter.Push(-f)
|
||
|
}
|
||
|
|
||
|
func round(interpreter *Interpreter) {
|
||
|
f := interpreter.PopFloat()
|
||
|
interpreter.Push(float(int(f + 0.5)))
|
||
|
}
|
||
|
|
||
|
func abs(interpreter *Interpreter) {
|
||
|
f := interpreter.PopFloat()
|
||
|
interpreter.Push(float(math.Fabs(float64(f))))
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
func initMathOperators(interpreter *Interpreter) {
|
||
|
interpreter.SystemDefine("add", NewOperator(add))
|
||
|
interpreter.SystemDefine("sub", NewOperator(sub))
|
||
|
interpreter.SystemDefine("mul", NewOperator(mul))
|
||
|
interpreter.SystemDefine("div", NewOperator(div))
|
||
|
interpreter.SystemDefine("sqrt", NewOperator(sqrt))
|
||
|
interpreter.SystemDefine("cos", NewOperator(cos))
|
||
|
interpreter.SystemDefine("sin", NewOperator(sin))
|
||
|
interpreter.SystemDefine("atan", NewOperator(atan))
|
||
|
interpreter.SystemDefine("neg", NewOperator(neg))
|
||
|
interpreter.SystemDefine("round", NewOperator(round))
|
||
|
interpreter.SystemDefine("abs", NewOperator(abs))
|
||
|
}
|