在lua中,如果我们需要随机数的时候,会使用到math.random,为了避免伪随机我们的一般编写方式如下:
-- 获取当前系统时间(秒)作为随机种子 math.randomseed(os.time()) -- 有三种方式: -- 1. 不带参数调用时,获取的是[0,1)范围内的随机浮点数 -- 2. 带一个整型参数时,获取的是[1,n]范围内的随机整数 -- 3. 带两个整型参数m,n时,获取的是[m,n]范围内随机整数 -- 请注意Lua5.3以后,参数一定要为整数,否则会返回错误:bad argument #1 to 'random' (number has no integer representation) math.random(10, 30)
为何避免伪随机,我们为何要使用os.time()获取系统时间秒数作为种子呢?接下来我们将从lua进入c中一层层的random,randomseed的实现慢慢剥离出来。
lua C库相关文件的官方下载地址:http://www.lua.org/ftp/
下载成功后,其相关文件在src目录中,我们可以查看lmathlib.c文件
或者查看lua 源码相关,其地址为:http://www.lua.org/source/5.1/
如下是关于lua中math库的相关C库的方法:
static const luaL_Reg mathlib[] = { { "abs", math_abs}, { "acos", math_acos}, { "asin", math_asin}, { "atan", math_atan}, { "ceil", math_ceil}, { "cos", math_cos}, { "deg", math_deg}, { "exp", math_exp}, { "tointeger