Documentation icon Τεκμηρίωση module[δημιουργία]
-- calculate factorial (integers, ln of integer factorial, as well as natural logarithm factorial)
-- Gts-tg@el wiki, Aug. 2017

local p = {}

function p.calc(frame)
    local number = tonumber(frame.args[1])
    local fType  = frame.args[2]
    local result
    
    if number > 170 then
    	return '∞'
    elseif 	number ~= 0 then
    	if fType == 'ln' then
    	   result = math.log(factorial(number))
    	elseif fType == 'ln!' then
    	   result = ln_factorial(number)
    	else
           result = factorial(number)
        end   
    end
    
    return result
    
end

function factorial(number)
   if number == 0 then
      return 1
   else
      return number * factorial(number-1)
   end
end

function ln_factorial(number)
   if number == 0 then
      return math.log(1)
   else
      return math.log(number) + factorial(number-1)
   end
end

return p