mirror of
https://github.com/minetest/minetest.git
synced 2024-11-26 01:23:46 +01:00
42 lines
749 B
Lua
42 lines
749 B
Lua
--[[
|
|
Math utils.
|
|
--]]
|
|
|
|
function math.hypot(x, y)
|
|
return math.sqrt(x * x + y * y)
|
|
end
|
|
|
|
function math.sign(x, tolerance)
|
|
tolerance = tolerance or 0
|
|
if x > tolerance then
|
|
return 1
|
|
elseif x < -tolerance then
|
|
return -1
|
|
end
|
|
return 0
|
|
end
|
|
|
|
function math.factorial(x)
|
|
assert(x % 1 == 0 and x >= 0, "factorial expects a non-negative integer")
|
|
if x >= 171 then
|
|
-- 171! is greater than the biggest double, no need to calculate
|
|
return math.huge
|
|
end
|
|
local v = 1
|
|
for k = 2, x do
|
|
v = v * k
|
|
end
|
|
return v
|
|
end
|
|
|
|
function math.round(x)
|
|
if x < 0 then
|
|
local int = math.ceil(x)
|
|
local frac = x - int
|
|
return int - ((frac <= -0.5) and 1 or 0)
|
|
end
|
|
local int = math.floor(x)
|
|
local frac = x - int
|
|
return int + ((frac >= 0.5) and 1 or 0)
|
|
end
|