青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

lua的隨機數(shù)問題

http://dev.csdn.net/author/yanjun_1982/b682d53ae78846a19eb0b7751a250750.html     

   也許很多人會奇怪為什么使用LUA的時候,第一個隨機數(shù)總是固定,而且常常是最小的那個值,下面我就簡要的說明一下吧,說得不好,還請諒解。我現(xiàn)在使用的4.0版本的LUA,看的代碼是5.0的,呵呵

        LUA4.0版本中的自帶函數(shù)庫中有兩個關(guān)于隨機數(shù)的函數(shù),一個是random,一個是randomseed。random有兩個參數(shù),用來設(shè)置隨機數(shù)的范圍,比如random(1,100)設(shè)置隨機數(shù)的范圍為1至100之間。由于C中所產(chǎn)生的隨機序列是固定的,并且第一個隨機數(shù)比較小,只有41。LUA重新設(shè)計了random函數(shù),使得它可以產(chǎn)生范圍固定的隨機數(shù),但由于LUA的random只是封裝了C的rand函數(shù),使得random函數(shù)也有一定的缺陷,那就是如果random的兩個輸入?yún)?shù)的值相差很小的時候,那么隨機序列的第一個隨機數(shù)就會和第一個輸入?yún)?shù)很接近,比如第一次調(diào)用random(1,100)的時候,返回值肯定是1,只有相差大于799時,如random(1,800)第一次調(diào)用才會返回2,也是很接近1。
        由于這個原因,為了實現(xiàn)真正的隨機,那么第一次就不能讓玩家調(diào)用random函數(shù),不然玩家就可以獲得一些低概率的東西了。比如if random(1,100) == 1 then ...... do,看起來是1%的的概率,但是第一次執(zhí)行的時候是100%成立的,存在一定的隱患。解決這個問題的方法有兩個,一就是第一次random函數(shù)不能讓玩家執(zhí)行,二就是使用randomseed先設(shè)一個隨機種子。對于第一種方法,可能還是有一定的風險,畢竟隨機序列還是固定的,玩家第一次調(diào)用random的時候還是得到有規(guī)律的返回值。第二種方法比較安全,在服務(wù)器啟動的時候設(shè)置一個隨機種子,讓系統(tǒng)產(chǎn)生的隨機序列不相同,但使用randomseed的時候也還要注意一個問題,那就是做種子的數(shù)要足夠的大,大于10000就行了。不然randomseed所產(chǎn)生的隨機序列的第一個值還是很小。原因是randomseed是直接封裝了C的srand,如果種子的值太小,那么srand所產(chǎn)生的序列和默認序列(srand(1)所產(chǎn)生的序列)是相差不大的,序列的第一個值還是很小。
        因此,只要在服務(wù)器啟動的時候調(diào)用一下randomseed(GetTime())就可以解決這個問題了。
        還要補充一下,LUA中產(chǎn)生隨機數(shù)的算法還是有一些問題,比如執(zhí)行random(1,3276700),它返回的值最后兩位必為0。這是由LUA本身的隨機函數(shù)算法決定的。
        還是簡要介紹一下LUA中random函數(shù)的實現(xiàn)方法吧,主要由源碼中的下面兩行實現(xiàn):
        lua_Number r = (lua_Number)(rand()%RAND_MAX) / (lua_Number)RAND_MAX;
        lua_pushnumber(L, (int)floor(r*(u-m+1))+m);
        其中m為random函數(shù)的第一個參數(shù),u為第二個參數(shù)。由上面的代碼可以看出,如果u-l太小,那么當r也很小的時候,r*(u-m+1)就會很小(小于1),那么再經(jīng)過floor運算,最經(jīng)結(jié)果就是m。這就可以解釋為什么random產(chǎn)生的第一個隨機數(shù)常常會很接近m。再來看看當m為0,u為327670的時候會怎樣。在上面的代碼里,RAND_MAX是一個宏,它的值是32767,也就是C語言中rand函數(shù)可以返回的最大值(不同的操作系統(tǒng)可能會有不一樣的最大值)。當m為0,u為327670的時候,那么返回值就是floor(r*(327671)+0),我們再假設(shè)LUA與平臺無關(guān)并且rand不會返回32767(上面用%避免了這個問題),那么r就可以簡化為rand()/RAND_MAX,代入上式為floor(rand()*327671/32767)+0,就算rand()的返回值是32766,最終的結(jié)果也只有327660.99996......,經(jīng)過floor運算后,最后那位數(shù)必為0。呵呵,我叫這樣的隨機數(shù)就偽隨機數(shù)中的偽隨機數(shù)。實際上面的公式是不允許化簡的,即不能簡單地把r代入r*(u-m+1),至于為什么,呵呵,因為r的值并不是rand()/RAND_MAX的值,r是double類型的,所以它只是一個和rand()/RAND_MAX很接近的數(shù)。 

        引用請注明出處。作者:yanjun_1982   日期:2006年10月11日

posted on 2009-05-13 10:58 Brandon 閱讀(2096) 評論(0)  編輯 收藏 引用 所屬分類: 腳本語言

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

導航

統(tǒng)計

常用鏈接

留言簿(2)

隨筆分類

隨筆檔案

文章分類

文章檔案

收藏夾

IT WEB

常用鏈接

牛人BLOG

學習網(wǎng)站

搜索

積分與排名

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产欧美不卡在线观看| 两个人的视频www国产精品| 亚洲五月六月| 99热免费精品| 99精品热视频只有精品10| 亚洲日本无吗高清不卡| 亚洲免费av片| 国内成人自拍视频| 亚洲免费影院| 午夜精品剧场| 久久精品99国产精品酒店日本| 亚洲国产精品美女| 免费人成精品欧美精品| 欧美在线一级视频| 久热re这里精品视频在线6| 免费观看成人www动漫视频| 亚洲高清资源| 亚洲视屏在线播放| 久久精品一区中文字幕| 欧美激情精品久久久久久大尺度| 亚洲激情啪啪| 亚洲精品乱码久久久久久按摩观| 亚洲一区在线观看视频 | 欧美jizz19性欧美| 老司机凹凸av亚洲导航| 欧美 日韩 国产一区二区在线视频| 亚洲视频你懂的| 久久超碰97人人做人人爱| 久久久亚洲高清| 亚洲另类一区二区| 久久久国产亚洲精品| 欧美日本一区二区高清播放视频| 久久亚洲视频| 欧美日韩成人一区二区三区| 国产日韩在线看| 99re6热在线精品视频播放速度| 国产香蕉97碰碰久久人人| 亚洲国产欧美日韩精品| 午夜精品久久久久久久99热浪潮| 亚洲精品久久久久| 欧美一区二区三区四区高清| 亚洲国产日韩欧美在线99| 亚洲天堂成人| 欧美精品v日韩精品v国产精品| 久久久久综合网| 欧美日韩午夜在线| 亚洲国产一区二区三区高清| 久久精品国产第一区二区三区最新章节 | 亚洲承认在线| 亚洲一区三区电影在线观看| 欧美激情一区二区| 久久精品中文字幕一区| 国产精品亚洲一区二区三区在线| 欧美亚洲成人精品| 久久裸体视频| 亚洲自拍偷拍网址| 欧美区在线播放| 亚洲高清免费视频| 久久精品99国产精品酒店日本| 一区二区三区四区精品| 欧美专区在线观看| 亚洲自拍高清| 国产精品网红福利| 亚洲综合不卡| 夜夜夜久久久| 国产精品白丝jk黑袜喷水| 一区二区福利| 一本久道久久综合狠狠爱| 欧美日韩成人一区二区三区| 一区二区三区 在线观看视| 亚洲精品国久久99热| 欧美护士18xxxxhd| 亚洲久久在线| 亚洲精品久久| 国产精品久久久一区二区三区| 国产一区二区中文| 欧美一区二区三区在线看| 先锋亚洲精品| 一区精品在线| 欧美国产日韩一区二区在线观看| 亚洲精品中文字| 欧美激情第9页| 99这里只有精品| 亚洲影视综合| 国产欧美韩国高清| 老牛影视一区二区三区| 久久亚洲一区二区三区四区| 亚洲第一黄网| 亚洲高清影视| 国产精品捆绑调教| 久久久久久亚洲综合影院红桃| 亚洲国产小视频| 欧美三区美女| 欧美一区二区在线免费播放| 久久久久综合网| 一区二区日韩伦理片| 久久gogo国模裸体人体| 亚洲精品一区二区三区樱花| 一本色道久久综合狠狠躁的推荐| 免费成人av在线看| 在线亚洲高清视频| 欧美在线观看视频在线| 99精品热视频只有精品10| 久久电影一区| 一区二区久久久久| 欧美一区二区三区四区在线观看| 欧美大片va欧美在线播放| 亚洲午夜一区| 久久av资源网| 亚洲欧美另类综合偷拍| 久久亚洲精品一区二区| 午夜精品视频一区| 欧美激情按摩| 免费亚洲电影在线观看| 国产精品高清网站| 亚洲国产精品嫩草影院| 久久se精品一区精品二区| 国产精品成人免费视频 | 黄页网站一区| 一本大道av伊人久久综合| 精品不卡一区| 亚洲图片你懂的| 一本大道av伊人久久综合| 久久蜜臀精品av| 久久不射中文字幕| 国产精品亚洲片夜色在线| 亚洲激情影视| 亚洲国产欧美一区二区三区丁香婷| 久热精品视频在线观看| 欧美午夜一区| 亚洲另类一区二区| 一区二区久久久久久| 欧美成人精精品一区二区频| 老**午夜毛片一区二区三区| 国产麻豆91精品| 亚洲视频一起| 亚洲欧美国产va在线影院| 欧美区国产区| 亚洲毛片在线观看| 亚洲视频在线观看视频| 欧美区在线播放| 一二三区精品| 午夜精品久久久久久久蜜桃app| 久久精品30| 久久久久综合| 曰韩精品一区二区| 久久国产乱子精品免费女| 久久久久**毛片大全| 国产午夜久久久久| 久久精品官网| 欧美激情一区二区三区在线视频 | 亚洲欧美综合精品久久成人| 亚洲私人影院| 国产精品欧美日韩一区二区| 一本久道久久综合狠狠爱| 亚洲一区二三| 国产麻豆精品theporn| 亚洲欧美成人一区二区在线电影| 精品电影一区| 欧美粗暴jizz性欧美20| 亚洲国产精品久久久久婷婷老年| 国产精品二区二区三区| 亚洲永久视频| 久久亚洲捆绑美女| 亚洲级视频在线观看免费1级| 亚洲天堂成人在线观看| 午夜免费在线观看精品视频| 国产精品一区二区三区免费观看| 亚洲第一在线| 中日韩美女免费视频网址在线观看 | 国产一区二区三区四区在线观看 | 久久不射2019中文字幕| 国产精品久久久久久久久免费樱桃 | 亚洲国产精品一区二区尤物区| 亚洲高清视频在线观看| 一区二区三区蜜桃网| 国产精品美女久久久免费| 久久国产视频网| 亚洲人成7777| 久久精品导航| 在线视频你懂得一区二区三区| 欧美中文字幕在线观看| 老司机精品久久| 亚洲一区二区三区精品动漫| 伊人久久婷婷| 国产精品成人免费精品自在线观看| 欧美激情第二页| 亚洲免费在线| 亚洲国产日韩在线| 国产精品免费福利| 欧美韩日精品| 久久男女视频| 亚洲欧美电影院| 99一区二区| 欧美激情成人在线视频| 久久久久久久久一区二区| 亚洲欧美日韩网| 亚洲国产一区二区视频 | 欧美一区二区啪啪| 亚洲国产成人不卡|