local function simpletobin(num)
local s = ""
while num ~= 0 do
local bit = math.mod(num, 2)
num = math.floor(num / 2)
s = bit .. s
end
while string.len(s) < 64 do
s = "0" .. s
end
return s
end
local floor = math.floor
function tobin(num)
local sign = false
if num < 0 then
sign = true
num = -num
end
local whole = floor(num)
local part = num - whole
local x = 0
local n = 0
local first = true
while true do
local q = whole / 2
whole = floor(q)
if whole == 0 then
break
end
local bit
if whole ~= q then
x = x + 2^n
end
n = n + 1
end
local m = n + 1023
while part ~= 0 do
part = 2 * part
local b = floor(part)
x = x * 2 + b
n = n + 1
part = part - b
end
x = x * 2^(52 - n)
n = 52
while m ~= 0 do
local q = m / 2
m = floor(q)
if m ~= q then
x = x + 2^n
end
n = n + 1
end
if sign then
x = x + 2^63
end
return simpletobin(x)
end