精华内容
下载资源
问答
  • Lua 生成随机数

    2019-06-21 16:51:38
    Lua 生成随机数需要用到两个函数: math.randomseed(xx), math.random(n , m) 1. math.randomseed(n) 接收一个整数 n 作为随机序列种子。 2. math.random(n , m) 有三种用法: 无参调用, ...

    原文链接:http://blog.csdn.net/zhangxaochen/article/details/8095007

    Lua 生成随机数需要用到两个函数:
    math.randomseed(xx), math.random(n , m)

    1. math.randomseed(n) 接收一个整数 n 作为随机序列种子。
    2. math.random(n , m) 有三种用法: 无参调用, 产生 (0,1) 之间的浮点随机数; 只有参数 n, 产生 1-n 之间的整数; 有两个参数 n, m, 产生 n-m 之间的随机整数

    对于相同的随机种子, 生成的随即序列一定是相同的。所以程序每次运行, 赋予不同的种子很重要。很自然想到使用系统时间作为随机种子,即:

    math.randomseed(os.time()) ---只需要seed一次就好了!!!!!!!!!!!!
    ----然后不断产生随机数
    for i=1, 5 do
     print(math.random())
    end

    但是问题出来了, 如果程序运行时间, 你又在很短的时间内多次运行这个程序,那么你得到的随机序列会是几乎不变的。 像这样:
    >lua -e "io.stdout:setvbuf 'no'" "test.lua" 
    0.71141697439497
    0.060121463667714
    0.067506942960906
    0.8607745597705
    0.60652485732597
    >Exit code: 0
    >lua -e "io.stdout:setvbuf 'no'" "test.lua" 
    0.71141697439497
    0.060121463667714
    0.067506942960906
    0.8607745597705
    0.60652485732597
    >Exit code: 0
    >lua -e "io.stdout:setvbuf 'no'" "test.lua" 
    0.7115085299234
    0.38813440351573
    0.6127201147496
    0.59511093478195
    0.9212927640614
    >Exit code: 0

    可以看到前两次运行的随机数都是一样的。究其原因,就是 os.time() 返回的时间是秒级的, 不够精确, 而 random() 还有个毛病就是如果 seed 很小或者seed 变化很小,产生的随机序列仍然很相似。比如:

    math.randomseed(100)
    print(math.random(1000))
    math.randomseed(102)
    print(math.random(1000))

    两次赋予的 seed 分别是 100, 102 但是random 生成的第一个随机数却是一样的。因此“短时间内多次运行程序” 这样的需求下 os.time 还真不大好。可是又没有比 time 函数更方便的种子生成器, 怎么办呢?
    可以这样:

    math.randomseed(tostring(os.time()):reverse():sub(1, 6))

    就是把 time返回的数值字串倒过来(低位变高位), 再取高位6位。 这样, 即使 time变化很小, 但是因为低位变了高位, 种子数值变化却很大,就可以使伪随机序列生成的更好一些
    参考文章:http://lua-users.org/wiki/MathLibraryTutorial
    数学库源码: http://www.lua.org/source/5.1/lmathlib.c.html

     

    原文链接:http://blog.csdn.net/zhangxaochen/article/details/8095007
    {{OVER}}
    --------------------- 
    作者:zhangxaochen 
    来源:CSDN 
    原文:https://blog.csdn.net/zhangxaochen/article/details/8095007 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • lua 生成随机数

    2018-02-09 12:52:00
    Lua 生成随机数需要用到两个函数: math.randomseed(n) 接收一个整数n作为随机序列种子 math.random([n [, m]]) 有三种用法:无参数调用,产生(0,1)之间的浮点数;只有参数 n, 产生 1-n 之间的整数; 有两个...

    Lua 生成随机数需要用到两个函数:

    math.randomseed(n)     接收一个整数n作为随机序列种子

    math.random([n [, m]])    有三种用法:无参数调用,产生(0,1)之间的浮点数;只有参数 n, 产生 1-n 之间的整数; 有两个参数 n, m, 产生 n-m 之间的随机整数。

     

    eg:使用系统时间作为随机种子

    math.randomseed(tostring(os.time()):reverser():sub(1,6))  ----把 time返回的数值字串倒过来(低位变高位), 再取高位6位

     

    用法:

    先设置时间种子:math.randomseed(tostring(os.time()):reverser():sub(1,6))

    产生随机数:math.random(1,100)

     

    转载于:https://www.cnblogs.com/xyc211/p/8434994.html

    展开全文
  • Openwrt中使用Lua生成随机数 在OpenWrt中使用Lua生成随机数还是比较简单了,下面记录一下生成脚本。 fs = require"nixio.fs" md5 = require("md5") local rand = fs.readfile("/dev/urandom",16) local strings= ...

    Openwrt中使用Lua生成随机数

    在OpenWrt中使用Lua生成随机数还是比较简单了,下面记录一下生成脚本。

    
    
    fs = require"nixio.fs"
    md5 = require("md5")
    
    local rand = fs.readfile("/dev/urandom",16)
    local strings= "hellomd5lua"
    print(md5.sumhexa(rand))
    

    这里面主要使用了Openwrt中封装的 nixio模块中的fs模块,这个模块可以对文件系统中的文件进行读写,其中

    local rand = fs.readfile("/dev/urandom",16)

    就是对 /dev/urandom 这个生成随机数的节点进行读取,读取长度为16字节。

    展开全文
  • lua需要生成随机数的需求也是很常见的,为了生成看起来更随机的数字,我们需要注意以下几点 我们也需要给随机数设置随机数种子:math.randomseed(xx) lua对随机数种子也是有一定要求的:不能太相近 lua中的os.time...

    lua需要生成随机数的需求也是很常见的,为了生成看起来更随机的数字,我们需要注意以下几点

    1. 我们也需要给随机数设置随机数种子:math.randomseed(xx)
    2. lua对随机数种子也是有一定要求的:不能太相近
    3. lua中的os.time()是基于秒的,不太满足lua对随机数种子的要求(如果设置随机数种子的频率太高的话)

    那怎么做?
    把 os.time()返回的数值字串倒过来再取高位7位。 这样,即使 os.time()变化很小,随机数种子也会很大

    math.randomseed(tostring(os.time()):reverse():sub(1, 7))

     

    例:

    math.randomseed(tostring(os.time()):reverse():sub(1, 7)) –设置时间种子
    
    for i=1, 15 do
    print(math.random()) –产生0到1之间的随机数
    print(math.random(1,100)) –产生1到100之间的随机数
    end 
    展开全文
  • function GetRandomText() --math.randomseed( tonumber(tostring(os.time()):reverse():sub(1,6)) ) math.randomseed(os.time()) szText = "" for i = 1, 1000 do nRandomNum = tostring(math....
  • Lua笔记】Lua生成随机数

    千次阅读 2018-03-16 10:09:10
    Lua生成随机数注意: 给随机数设置随机数种子:math.randomseed(xx) lua对随机数种子也是有一定要求的:不能太相近 lua中的os.time()是基于秒的,不太满足lua对随机数种子的要求(如果设置随机数种子的频率太高的话...
  • Lua 随机数生成问题

    2017-03-03 16:01:01
    Lua 随机数生成问题 2014-08-27 icecity00... 摘自 csdn博客 阅 131 转 1 转藏到我的图书馆 微信分享: 原文链接:...Lua 生成随机数需要用到两个函数
  • lua随机数生成问题

    2017-08-02 11:06:07
    Lua 生成随机数需要用到两个函数: math.randomseed(xx), math.random([n [, m]]) 1. math.randomseed(n) 接收一个整数 n 作为随机序列种子。 2. math.random([n [, m]]) 有三种用法: 无参调用, 产生 (0,1) ...
  • Cocos2d-Lua随机数

    千次阅读 2016-06-17 19:29:07
    Lua语言是利用两个函数来生成随机数:math.randomseed(值) //提供种子值 math.random(val1, val2) //随机生成一个在val1和val2之间的随机数,若全部缺省,则默认生成0-1之间的随机数,若只有一个val1,则生成1-val1...
  • lua连续随机数

    2014-01-21 19:07:00
    号外:惭愧,工作后几乎没有写博客了,其实是有时间的(每周...1、把生成的数放到一个表里面,每次随机时判断这个表里是否有,若有再随机一次 2、先生成一个连续的数字表t,每次随机一个数n,把t[n]保存,并移除t[n...
  • lua 随机数

    2016-05-09 14:02:47
    原文链接:... Lua 生成随机数需要用到两个函数: math.randomseed(xx), math.random([n [, m]]) 1. math.randomseed(n) 接收一个整数 n 作为随机序列种子。 2. math.random([n
  • lua随机数

    2016-10-27 15:57:31
    Lua 生成随机数需要用到两个函数: math.randomseed(xx), math.random([n [, m]]) 1. math.randomseed(n) 接收一个整数 n 作为随机序列种子。 2. math.random([n [, m]]) 有三种用法: 无参调用, 产生 (0,1) ...
  • lua随机数种子取随机数

    千次阅读 2018-09-11 17:29:05
    lua需要生成随机数的需求也是很常见的,为了生成看起来更随机的数字,我们需要注意以下几点 我们也需要给随机数设置随机数种子:math.randomseed(xx) lua对随机数种子也是有一定要求的:不能太相近 lua中的os.time...
  • Lua笔记:生成随机数

    千次阅读 2015-04-17 15:50:41
    --------------------------- 生成随机数 ----------------------------------------- --1. 第一种方法 math.randomseed(os.time()) --设置随机数种子 --2. 第二种方法 math.randomseed( tonumber(tostring(os....

空空如也

空空如也

1 2 3 4
收藏数 66
精华内容 26
关键字:

lua生成随机数