123456789101112131415161718192021222324252627282930313233343536373839404142 |
- --[[
- 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
|