From 42557bcfc47cd00012a6a559c2b002fffa245b7d Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Tue, 25 Jun 2024 16:53:08 -0400 Subject: remove factorial wrapper function --- func.go | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/func.go b/func.go index e3bb8d7..fc19e87 100644 --- a/func.go +++ b/func.go @@ -17,7 +17,12 @@ func parseFunction(fn string) func(*Calculator) { case "rad": return apply(degToRad) case "fac": - return fac + return apply(func(x float64) float64 { + if !isUint(x) { + return x + } + return float64(factorial(uint(x))) + }) case "ch": // choose return combination case "log10": @@ -99,17 +104,16 @@ func radToDeg(rad float64) (deg float64) { return rad * 180 / math.Pi } -// Factorial (!). -func fac(c *Calculator) { - n, err := c.stack.pop() - if err != nil { - return +// factorial returns n! (n factorial). +func factorial(n uint) uint { + if n == 0 { + return 1 } - if !isUint(n) { // undefined on non-ints - c.stack.push(n) - return + // n! = n*(n-1)! + for i := n - 1; i > 1; i-- { + n *= i } - c.stack.push(float64(factorial(uint(n)))) + return n } // Combination function. "n choose k" with integers n and k such that n >= k >= 0. @@ -142,18 +146,6 @@ func combination(c *Calculator) { } } -// factorial returns n! (n factorial). -func factorial(n uint) uint { - if n == 0 { // 0! = 1 - return 1 - } - // n! = n*(n-1)! - for i := n - 1; i > 1; i-- { - n *= i - } - return n -} - func isUint(n float64) bool { return float64(uint(n)) == n } -- cgit v1.2.3