2018-10-14 03:07:28 +02:00
|
|
|
package math
|
|
|
|
|
|
|
|
import (
|
2019-02-13 19:31:18 +02:00
|
|
|
"math"
|
|
|
|
|
2018-10-14 03:07:28 +02:00
|
|
|
"github.com/MontFerret/ferret/pkg/runtime/core"
|
|
|
|
"github.com/MontFerret/ferret/pkg/runtime/values"
|
2019-02-13 19:31:18 +02:00
|
|
|
"github.com/MontFerret/ferret/pkg/runtime/values/types"
|
2018-10-14 03:07:28 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
RadToDeg = 180 / math.Pi
|
|
|
|
DegToRad = math.Pi / 180
|
|
|
|
RadToGrad = 200 / math.Pi
|
|
|
|
GradToDeg = math.Pi / 200
|
|
|
|
)
|
|
|
|
|
|
|
|
func NewLib() map[string]core.Function {
|
|
|
|
return map[string]core.Function{
|
|
|
|
"ABS": Abs,
|
|
|
|
"ACOS": Acos,
|
|
|
|
"ASIN": Asin,
|
|
|
|
"ATAN": Atan,
|
|
|
|
"ATAN2": Atan2,
|
|
|
|
"AVERAGE": Average,
|
|
|
|
"CEIL": Ceil,
|
|
|
|
"COS": Cos,
|
|
|
|
"DEGREES": Degrees,
|
|
|
|
"EXP": Exp,
|
|
|
|
"EXP2": Exp2,
|
|
|
|
"FLOOR": Floor,
|
|
|
|
"LOG": Log,
|
|
|
|
"LOG2": Log2,
|
|
|
|
"LOG10": Log10,
|
|
|
|
"MAX": Max,
|
|
|
|
"MEDIAN": Median,
|
|
|
|
"MIN": Min,
|
|
|
|
"PERCENTILE": Percentile,
|
|
|
|
"PI": Pi,
|
|
|
|
"POW": Pow,
|
|
|
|
"RADIANS": Radians,
|
|
|
|
"RAND": Rand,
|
|
|
|
"RANGE": Range,
|
|
|
|
"ROUND": Round,
|
|
|
|
"SIN": Sin,
|
|
|
|
"SQRT": Sqrt,
|
|
|
|
"STDDEV_POPULATION": StandardDeviationPopulation,
|
|
|
|
"STDDEV_SAMPLE": StandardDeviationSample,
|
|
|
|
"SUM": Sum,
|
|
|
|
"TAN": Tan,
|
|
|
|
"VARIANCE_POPULATION": PopulationVariance,
|
|
|
|
"VARIANCE_SAMPLE": SampleVariance,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func toFloat(arg core.Value) float64 {
|
2019-02-13 19:31:18 +02:00
|
|
|
if arg.Type() == types.Int {
|
2018-10-14 03:07:28 +02:00
|
|
|
return float64(arg.(values.Int))
|
|
|
|
}
|
|
|
|
|
|
|
|
return float64(arg.(values.Float))
|
|
|
|
}
|