mirror of
https://github.com/minetest/minetest.git
synced 2024-11-20 14:43:45 +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
|