lua如何產生隨機數,以及需要注意的問題

2021-06-28 05:00:48 字數 1229 閱讀 2473

lua中的自帶函式庫中有兩個關於隨機數的函式,乙個是random,乙個是randomseed。

random有兩個引數,用來設定隨機數的範圍,比如random(1,100)設定隨機數的範圍為1至100之間。

(random函式說明)this function is an inte***ce to the ****** pseudo-random generator functionrandprovided by ansi c.

由於c中所產生的隨機序列是固定的。也就是每次執行時取得的隨機數是一樣的。lua的random函式說明已經指出,lua的random函式只是對ansi c的隨機函式的一次封裝。所以依然存在這個問題。執行random(1,600),每次的輸出結果都是:

[lua-print] 1

[lua-print] 79

[lua-print] 454

[lua-print] 276

[lua-print] 320

[lua-print] 132

[lua-print] 29

[lua-print] 408

[lua-print] 408

[lua-print] 561

這個只是偽隨機,並不能達到我們想要的效果,於是另乙個函式的用處就有了。

randomseed()函式,設定隨機數的種子。在lua虛擬機器啟動的時候設定乙個隨機種子,讓系統產生的隨機序列不相同,但使用randomseed的時候也還要注意乙個問題,那就是做種子的數要足夠的大,大於10000就行了。不然randomseed所產生的隨機序列的第乙個值還是很小。原因是randomseed是直接封裝了c的srand,如果種子的值太小,那麼srand所產生的序列和預設序列(srand(1)所產生的序列)是相差不大的,序列的第乙個值還是很小。

因此,只要在lua虛擬機器啟動的時候呼叫一下randomseed(os.time()

)就可以解決這個問題了。但是這樣依然還有問題存在。

雖然可以獲取我們想要的真正的隨機數了,但是有個缺陷就是每次第一次呼叫時獲取的隨機數依然就固定的,至於原因就涉及到lua內部實現了。解決方法很簡單,就是在設定隨機種子的時候呼叫一下random函式,隨後就能正常獲取隨機數了。

在lua虛擬機器啟動的時候呼叫:

--設定隨機種子

math.randomseed(os.time())

math.random(1,10000)

需要隨機數的時候只需要呼叫:random(1,600)就可以了。

隨機數以及希爾排序

希爾排序 簡單地說,希爾排序就是進行多次的插入排序,次數由增量決定 又稱縮小增量排序,最後增量減小到1 適合元素多的情況。一次插入排序是穩定的,不會改變相同元素的相對順序,但在不同的插入排序過程中,相同的元素可能在各自的插入排序中移動,最後其穩定性就會被打亂,所以希爾排序是不穩定的。隨機數 要產生 ...

lua 中隨機數產生

需要用到兩個函式 1 math.randomseed n 接收乙個整數n作為隨機序列種子 2 math.random n,m 這個函式有三種用法,分別是不跟引數,此時產生 0,1 之間的隨機浮點數 有乙個引數n,產生1到n之間的整數 有2個引數n和m,產生n到m之間的隨機整數。最常用的方法是 mat...

如何產生真正隨機數

在自動化測試中,隨機測試是很常見的,一般人都知道srand和 rand 配合使用產生偽 隨機數序列,但是如何選擇seed,其實是個問題,用最簡單的time null 是可以,但是如果在乙個指令碼裡面快速執行很多遍時,很有可能時間還沒有超過 個時間顆粒度,這樣前後執行的測試取的是一樣的隨機數。一般可以...