summaryrefslogtreecommitdiff
path: root/calc.go
diff options
context:
space:
mode:
authorxuri <xuri.me@gmail.com>2021-11-02 00:02:35 +0800
committerxuri <xuri.me@gmail.com>2021-11-02 00:02:35 +0800
commitb0eb9ef807afb46b1b4f7932b4e08da1780e4fc1 (patch)
tree8888e6195e3eec2532259ca537464ea7313c61b4 /calc.go
parent3447cfecf2402f58e4667b9995dfa21e949b9b69 (diff)
ref #65: new formula functions DELTA and GESTEP
Diffstat (limited to 'calc.go')
-rw-r--r--calc.go53
1 files changed, 53 insertions, 0 deletions
diff --git a/calc.go b/calc.go
index 7d27cb8..9ba6626 100644
--- a/calc.go
+++ b/calc.go
@@ -366,6 +366,7 @@ type formulaFuncs struct {
// DEC2OCT
// DECIMAL
// DEGREES
+// DELTA
// DEVSQ
// DISC
// DOLLARDE
@@ -392,6 +393,7 @@ type formulaFuncs struct {
// GAMMALN
// GCD
// GEOMEAN
+// GESTEP
// HARMEAN
// HEX2BIN
// HEX2DEC
@@ -1975,6 +1977,57 @@ func (fn *formulaFuncs) dec2x(name string, argsList *list.List) formulaArg {
return newStringFormulaArg(strings.ToUpper(binary))
}
+// DELTA function tests two numbers for equality and returns the Kronecker
+// Delta. i.e. the function returns 1 if the two supplied numbers are equal
+// and 0 otherwise. The syntax of the function is:
+//
+// DELTA(number1,[number2])
+//
+func (fn *formulaFuncs) DELTA(argsList *list.List) formulaArg {
+ if argsList.Len() < 1 {
+ return newErrorFormulaArg(formulaErrorVALUE, "DELTA requires at least 1 argument")
+ }
+ if argsList.Len() > 2 {
+ return newErrorFormulaArg(formulaErrorVALUE, "DELTA allows at most 2 arguments")
+ }
+ number1 := argsList.Front().Value.(formulaArg).ToNumber()
+ if number1.Type != ArgNumber {
+ return number1
+ }
+ number2 := newNumberFormulaArg(0)
+ if argsList.Len() == 2 {
+ if number2 = argsList.Back().Value.(formulaArg).ToNumber(); number2.Type != ArgNumber {
+ return number2
+ }
+ }
+ return newBoolFormulaArg(number1.Number == number2.Number).ToNumber()
+}
+
+// GESTEP unction tests whether a supplied number is greater than a supplied
+// step size and returns. The syntax of the function is:
+//
+// GESTEP(number,[step])
+//
+func (fn *formulaFuncs) GESTEP(argsList *list.List) formulaArg {
+ if argsList.Len() < 1 {
+ return newErrorFormulaArg(formulaErrorVALUE, "GESTEP requires at least 1 argument")
+ }
+ if argsList.Len() > 2 {
+ return newErrorFormulaArg(formulaErrorVALUE, "GESTEP allows at most 2 arguments")
+ }
+ number := argsList.Front().Value.(formulaArg).ToNumber()
+ if number.Type != ArgNumber {
+ return number
+ }
+ step := newNumberFormulaArg(0)
+ if argsList.Len() == 2 {
+ if step = argsList.Back().Value.(formulaArg).ToNumber(); step.Type != ArgNumber {
+ return step
+ }
+ }
+ return newBoolFormulaArg(number.Number >= step.Number).ToNumber()
+}
+
// HEX2BIN function converts a Hexadecimal (Base 16) number into a Binary
// (Base 2) number. The syntax of the function is:
//