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

lua的隨機(jī)數(shù)問(wèn)題

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

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

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

        引用請(qǐng)注明出處。作者:yanjun_1982   日期:2006年10月11日

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

<2010年6月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(2)

隨筆分類(lèi)

隨筆檔案

文章分類(lèi)

文章檔案

收藏夾

IT WEB

常用鏈接

牛人BLOG

學(xué)習(xí)網(wǎng)站

搜索

積分與排名

最新評(píng)論

閱讀排行榜

評(pí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>
            亚洲电影在线观看| 99国产精品| 久久综合久久综合久久综合| 欧美一进一出视频| 午夜在线视频一区二区区别| 欧美一级片久久久久久久| 欧美在线免费观看| 裸体一区二区| 欧美日韩国产成人在线91| 欧美日韩亚洲91| 国产精品影音先锋| 亚洲第一中文字幕| 亚洲性夜色噜噜噜7777| 另类国产ts人妖高潮视频| 久久精品一区二区三区四区| 欧美成人资源| 国产精品乱码一区二区三区 | 欧美日本亚洲视频| 欧美日韩岛国| 国产午夜精品视频| 亚洲欧洲精品一区| 亚洲日本激情| 欧美中文字幕在线视频| 欧美二区在线播放| 亚洲一区二区三区四区五区黄| 久久国产精品久久w女人spa| 欧美.www| 宅男66日本亚洲欧美视频| 久久国产精品亚洲77777| 欧美日韩高清在线| 国语自产精品视频在线看一大j8| 欧美三级在线播放| 国产一区再线| 亚洲欧美一区二区精品久久久| 亚洲激情亚洲| 欧美在线欧美在线| 99精品视频免费观看| 欧美在线视频全部完| 国产精品久久久久999| 亚洲人成久久| 免费欧美在线| 欧美影院成人| 国产乱理伦片在线观看夜一区| 国产精品久久久久久久久久久久久久| 久久九九电影| 国产精品乱人伦一区二区| 亚洲三级影片| 欧美成人免费在线视频| 久久精品国产一区二区三区| 国产欧美欧洲在线观看| 亚洲综合电影一区二区三区| 亚洲精品国久久99热| 久久综合精品一区| 亚洲二区在线视频| 欧美成人首页| 亚洲香蕉成视频在线观看| 久久一二三国产| 一区二区欧美在线观看| 欧美一区二区日韩| 国产乱码精品1区2区3区| 亚洲欧美另类久久久精品2019| 亚洲黄色视屏| 麻豆国产精品va在线观看不卡| 久久午夜国产精品| 欧美影院视频| 亚洲成人在线视频网站| 欧美日韩一区二区在线视频| 夜夜嗨一区二区| 99精品热6080yy久久| 欧美性猛交xxxx乱大交退制版| 国产精品国色综合久久| 亚洲综合视频在线| 亚洲欧美日本国产专区一区| 国产精品久久久久一区| 午夜亚洲性色福利视频| 亚洲一区二区黄| 国产日产欧美一区| 美女主播一区| 欧美绝品在线观看成人午夜影视| 国产精品v欧美精品v日韩精品| 国产精品一区二区在线观看| 亚洲欧美大片| 先锋资源久久| 亚洲高清一二三区| 99国产一区| 国产日韩欧美在线视频观看| 老色鬼精品视频在线观看播放| 一本色道久久加勒比88综合| 欧美精品黄色| 午夜亚洲视频| 久久中文欧美| 亚洲中字黄色| 久久久久国产精品人| 亚洲精品一区二区三区不| 亚洲视频在线观看网站| 在线成人h网| 一本大道久久a久久精品综合| 久久久之久亚州精品露出| 日韩视频在线免费| 亚洲一区在线直播| 最新日韩在线| 欧美在线观看网站| 中文精品在线| 久久综合五月天婷婷伊人| 亚洲欧美精品在线| 欧美sm重口味系列视频在线观看| 99精品欧美一区二区三区| 国产精品久久久久免费a∨大胸| 国产视频丨精品|在线观看| 欧美国产激情二区三区| 国产欧美日韩一区二区三区| 亚洲精品一二区| 亚洲国产欧美在线| 午夜在线一区| 亚洲一区二区三区在线视频| 你懂的亚洲视频| 久久久噜噜噜久久久| 国产一区三区三区| 久久成人精品无人区| 欧美精品尤物在线| 你懂的视频一区二区| 国产亚洲精品久久久久久| 亚洲香蕉视频| 亚洲男人的天堂在线| 欧美日韩123| 亚洲精品国产拍免费91在线| 亚洲电影在线| 久久免费国产精品1| 久久一区二区精品| 国模私拍视频一区| 久久国产欧美精品| 另类国产ts人妖高潮视频| 国产一区导航| 久久国产色av| 你懂的国产精品永久在线| 在线看一区二区| 免费观看日韩av| 亚洲精品久久久久久久久| 亚洲午夜91| 国产女主播在线一区二区| 欧美与欧洲交xxxx免费观看| 久久se精品一区精品二区| 国产伦一区二区三区色一情| 亚洲欧美日韩国产中文在线| 欧美在线视频二区| 激情五月综合色婷婷一区二区| 亚洲成人在线视频播放| 在线成人免费观看| 久久尤物视频| 亚洲伦伦在线| 久久成人精品无人区| 在线播放中文字幕一区| 欧美国产欧美综合 | 香蕉久久夜色精品国产使用方法 | 亚洲资源av| 久久狠狠亚洲综合| 韩国视频理论视频久久| 免费观看一区| 亚洲午夜视频在线| 久久中文字幕一区| 99re8这里有精品热视频免费| 香蕉视频成人在线观看| 久久久国产亚洲精品| 亚洲欧洲一区| 国产精品九九| 久久综合九色综合欧美就去吻| 亚洲砖区区免费| 国产精品有限公司| 久久综合成人精品亚洲另类欧美 | 制服丝袜亚洲播放| 国产精品爽黄69| 久久久噜噜噜久噜久久| 亚洲免费成人| 男人插女人欧美| 午夜精品久久久久久99热| 亚洲国产精品精华液网站| 国产精品久久久一区二区| 老**午夜毛片一区二区三区| 99精品国产99久久久久久福利| 亚洲精品日产精品乱码不卡| 国产精品美女www爽爽爽视频| 亚洲国产欧美国产综合一区| 伊大人香蕉综合8在线视| 亚洲第一毛片| 午夜精品一区二区三区在线| 亚洲国产精品专区久久| 国产精品欧美精品| 欧美精品粉嫩高潮一区二区 | 欧美承认网站| 亚洲一级片在线观看| 91久久久久久国产精品| 久久频这里精品99香蕉| 亚洲综合清纯丝袜自拍| 99视频日韩| 亚洲欧洲精品成人久久奇米网| 久久理论片午夜琪琪电影网| 亚洲理论电影网| 亚洲第一伊人| 欧美不卡高清| 欧美sm视频|