2013-04-28 87 views

回答

0

您種下了PRNG嗎?

例如,math.randomseed(os.time())

3

Lua使用C運行時庫的僞隨機數發生器。其屬性取決於您的平臺。例如,在某些版本的Windows上,生成器始終在僞隨機序列的同一點進行初始化,因此運行程序時總是會得到相同的值序列(請參閱http://msdn.microsoft.com/en-US/library/f0d4wb4t.aspx)。

您可以使用math.randomseed在別處啓動僞隨機序列。您可以使用os.time在每次運行程序時使用不同的值進行初始化(假設您允許運行間隔至少一秒)。

還要注意,在某些Windows C運行時庫中,調用srand(或Lua中的math.randomseed)後得到的第一個僞隨機值非常依賴於傳遞的值。所以我建議在調用math.randomseed後調用math.random一次並忽略它的結果。

3

這不一定是正確的。所有的隨機數字不是完全隨機的。作爲一個例子,你可以看看這個工作代碼;這與您發佈的問題相同:http://eval.in/17806

您可以看到的輸出是。

從DOUB的答覆引述:

您可以使用math.randomseed啓動僞隨機序列 別處。您可以使用os.time在每次運行程序時使用不同的 值進行初始化(假設您允許在兩次運行之間經過至少一個 秒)。

這裏是在行動randomseed同一個程序的例子:http://eval.in/17808

math.randomseed(os.time()) 
x = math.random(17,41) 
print(x) 
+0

使用math.randomseed(os.time())工作的第一次,我用它,但然後不停返回無論我在執行過程中允許經過多少秒鐘,它的值都是相同的。思考? – user2218101 2013-04-29 21:29:51

+0

@ user2218101你能提供你的代碼嗎? – hjpotter92 2013-04-29 22:47:17

+0

您需要在每次調用math.random() – moorepants 2013-09-19 18:59:00