62 lines
1.7 KiB
Lua
62 lines
1.7 KiB
Lua
-- Helper function to display results in scientific notation corrected
|
|
function eshow(x)
|
|
local e = math.floor(x / math.log(10))
|
|
local exponentiated = math.exp(x - e * math.log(10))
|
|
-- Corrected format specifier from %.8Fe%+d to %.8e, and manually constructing the scientific notation if needed
|
|
return string.format("%.8e", exponentiated) .. "e" .. tostring(e)
|
|
end
|
|
|
|
-- The rest of the functions remain the same
|
|
|
|
-- Define the factorial function for permutations
|
|
function P(n, k)
|
|
local x = 1
|
|
for i = n - k + 1, n do
|
|
x = x * i
|
|
end
|
|
return x
|
|
end
|
|
|
|
-- Define the function for big permutations using logarithms
|
|
function P_big(n, k)
|
|
local x = 0
|
|
for i = n - k + 1, n do
|
|
x = x + math.log(i)
|
|
end
|
|
return eshow(x)
|
|
end
|
|
|
|
-- Define the combinations function
|
|
function C(n, k)
|
|
local x = 1
|
|
for i = 1, k do
|
|
x = x * (n - i + 1) / i
|
|
end
|
|
return x
|
|
end
|
|
|
|
-- Define the function for big combinations using logarithms
|
|
function C_big(n, k)
|
|
local x = 0
|
|
for i = 1, k do
|
|
x = x + math.log(n - i + 1) - math.log(i)
|
|
end
|
|
return math.exp(x)
|
|
end
|
|
|
|
-- Function to showcase the calculations
|
|
function showoff(text, code, fname, ...)
|
|
local n = {...}
|
|
print("\nA sample of " .. text .. " from " .. n[1] .. " to " .. n[#n] .. "")
|
|
for _, v in ipairs(n) do
|
|
local k = math.floor(v / 3)
|
|
print(v, fname .. " " .. k .. " = ", code(v, k))
|
|
end
|
|
end
|
|
|
|
-- Examples of usage
|
|
showoff("Permutations", P, "P", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
|
|
showoff("Combinations", C, "C", 10, 20, 30, 40, 50, 60)
|
|
showoff("Permutations", P_big, "P", 5, 50, 500, 1000, 5000, 15000)
|
|
showoff("Combinations", C_big, "C", 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000)
|