modlib/math.lua

51 lines
1.3 KiB
Lua
Raw Normal View History

2020-04-21 15:04:07 +02:00
-- Make random random
math.randomseed(minetest.get_us_time())
2020-12-19 14:41:03 +01:00
for _ = 1, 100 do math.random() end
function round(number, steps)
steps = steps or 1
return math.floor(number * steps + 0.5) / steps
2020-02-09 01:39:54 +01:00
end
2020-12-19 14:41:03 +01:00
2020-03-23 20:20:43 +01:00
local c0 = ("0"):byte()
local cA = ("A"):byte()
2020-12-19 14:41:03 +01:00
2020-03-23 20:20:43 +01:00
function default_digit_function(digit)
2020-12-19 14:41:03 +01:00
if digit <= 9 then return string.char(c0 + digit) end
return string.char(cA + digit - 10)
2020-03-23 20:20:43 +01:00
end
2020-12-19 14:41:03 +01:00
2020-03-23 20:20:43 +01:00
default_precision = 10
2020-12-19 14:41:03 +01:00
-- See https://github.com/appgurueu/Luon/blob/master/index.js#L724
2020-03-23 20:20:43 +01:00
function tostring(number, base, digit_function, precision)
2020-12-19 14:41:03 +01:00
digit_function = digit_function or default_digit_function
precision = precision or default_precision
local out = {}
if number < 0 then
table.insert(out, "-")
number = -number
end
number = number + base ^ -precision / 2
local digit
while number >= base do
digit = math.floor(number % base)
table.insert(out, digit_function(digit))
number = number / base
end
digit = math.floor(number)
table.insert(out, digit_function(digit))
modlib.table.reverse(out)
number = number % 1
if number ~= 0 and number >= base ^ -precision then
table.insert(out, ".")
2020-12-19 15:31:37 +01:00
while precision >= 0 and number >= base ^ precision do
2020-12-19 14:41:03 +01:00
number = number * base
digit = math.floor(number % base)
table.insert(out, digit_function(digit))
number = number - digit
precision = precision - 1
end
end
return table.concat(out)
2020-03-23 20:20:43 +01:00
end