All pastes #112940 Raw Edit

ckknight

public lua v1 · immutable
·published 2006-08-03 09:12 UTC
rendered paste body
local floor = math.floorlocal mod = math.modlocal char = string.charlocal log = math.loglocal log2 = log(2)function Serialize(num)	local sign = num < 0	if sign then		num = -num	end	local exp = floor(log(num)/log2)	local mantissa = (num / 2^exp - 1) * 2^52	local x = (exp + 1023) * 2^52 + mantissa	if sign then		x = x + 2^63	end	return char(x / 72057594037927936, mod(x / 281474976710656, 256), mod(x / 1099511627776, 256), mod(x / 4294967296, 256), mod(x / 16777216, 256), mod(x / 65536, 256), mod(x / 256, 256), mod(x, 256))endfunction Deserialize(code)	local a = string.byte(code, 1)	local b = string.byte(code, 2)	local c = string.byte(code, 3)	local d = string.byte(code, 4)	local e = string.byte(code, 5)	local f = string.byte(code, 6)	local g = string.byte(code, 7)	local h = string.byte(code, 8)	local x = a * 72057594037927936 + b * 281474976710656 + c * 1099511627776 + d * 4294967296 + e * 16777216 + f * 65536 + g * 256 + h	local mantissa = 1 + mod(x, 2^52) / 2^52	local exp = mod(floor(x / 2^52), 2^11) - 1023	local sign = floor(x / 2^63) == 1 and -1 or 1	return sign * 2^exp * mantissaend