c語言中怎樣產(chǎn)生特定數(shù)目的隨機數(shù) haskell中如何抽取隨機數(shù)?
haskell中如何抽取隨機數(shù)?隨機數(shù)(我指的是偽隨機數(shù))是由顯性或隱性狀態(tài)產(chǎn)生的。這意味著在Hask:: StdG::(隨機a) gt (a,a) -gt IO a在給定范圍內(nèi)隨機返回A類型的值,全
haskell中如何抽取隨機數(shù)?
隨機數(shù)(我指的是偽隨機數(shù))是由顯性或隱性狀態(tài)產(chǎn)生的。這意味著在Hask:: StdG::(隨機a) gt (a,a) -gt IO a
在給定范圍內(nèi)隨機返回A類型的值,全局生成器將被更新。您可以通過元組指定范圍。下面的示例返回一個介于a和z之間的隨機值,包括a和z:
c lt- randomRIO(阿,中)
可以是任何類型嗎?那個 這不是真的。在Haskell 98標(biāo)準(zhǔn)中,隨機庫只支持bool、char、int、int::
返回a類型的隨機數(shù)(a可以是任何類型?見上),全局生成器也會更新。以下示例返回Doubl:: IO Doubl:: IO[float]Random Stuff Do n LT-Random Rio(1,7)序列(replicat::國際燃?xì)廨啓C標(biāo)準(zhǔn)發(fā)電機
用隨機種子創(chuàng)建一個生成器。
隨機::(隨機a,隨機g)
用生成器生成給定范圍的無限列表。示例:使用42作為隨機種子,返回一個包含A和Z(從A到Z)的無限列表:
隨機數(shù)(a,z) (mkStdG::(隨機a,隨機g)
用給定的生成器生成一個無限的隨機數(shù)列表。例如,使用42生成一個雙精度類型列表作為隨機種子:
::[雙精度]
隨機數(shù)的范圍由類型決定。需要查文檔確定具體范圍,或者直接用randomRs。
注意這些都是功能性的——意思是沒有副作用,特別是生成器不會更新。如果你用一個生成器生成第一個列表,然后用同一個生成器生成第二個列表…
g mkStdG::[Doubl::[Doubl:: random g::[Float]-gt[[Float]]work(r: RS)let n truncat: work ys
除了必要的打印操作之外,這純粹是功能性的。它用生成器生成一個無限列表,然后用這個無限列表生成另一個無限列表作為答案,最后把第一個作為返回值。
我這樣做是因為盡管我們今天的角色會產(chǎn)生一個隨機數(shù),但你通常需要很多。希望這個例子能對你有一點幫助。
上面的代碼通過使用一個生成器來創(chuàng)建一個包含F(xiàn)loat的無限列表。截取第一個值,將這個值展開為1到7,然后使用剩余的列表生成答案。換句話說,把輸入列表分成(r:rs),r決定生成列表的長度(1到。7)、答案會在rs之后計算。
::(隨機g) gt g -gt (g,g)
用一個隨機種子創(chuàng)建兩個不同的生成器,否則重用同一個種子是不明智的。
g mkStdGen 42(ga,gb)拆分g -不要在其他地方使用g
如果您想要創(chuàng)建兩個以上的發(fā)生器,可以對其中一個新發(fā)生器使用拆分:
g mkStdGen 42(ga,g) split g(gb,gc) split g -不要在其他地方使用g,g
我們可以用split得到兩個生成器,這樣就可以生成兩個隨機列表。
c lt- randomRIO (a,z)0
它將生成器一分為二,然后生成兩個列表。
我在主程序中硬編碼了隨機種子。正常情況下,你可以從其他地方獲得隨機種子——從輸入,從文件,從時間,或者從一些設(shè)備。
這些都可以在主程序中實現(xiàn),因為它們可以在IO monad中訪問。
您還可以通過getStdGen獲得全局生成器:
c lt-隨機里奧(a,z)1
【C語言】隨機數(shù)種子的設(shè)置?
這方面我之前了解過一點,不知道能不能幫到你。
我記得函數(shù)srand是用來生成一個范圍的,應(yīng)該是從一個標(biāo)準(zhǔn)時間到現(xiàn)在時間的秒的范圍。然后rand函數(shù)從這個范圍中取一個隨機值。他的返回值是一個介于0和RAND_MAX之間的隨機數(shù),在stdlib.h I don 我記不清具體有多少了。。