2016 - 2024

感恩一路有你

c语言中怎样产生特定数目的随机数 haskell中如何抽取随机数?

浏览量:1996 时间:2023-04-03 15:30:48 作者:采采

haskell中如何抽取随机数?

随机数(我指的是伪随机数)是由显性或隐性状态产生的。这意味着在Hask:: StdG::(随机a) gt (a,a) -gt IO a

在给定范围内随机返回A类型的值,全局生成器将被更新。您可以通过元组指定范围。下面的示例返回一个介于a和z之间的随机值,包括a和z:

c lt- randomRIO(阿,中)

可以是任何类型吗?那个 这不是真的。在Haskell 98标准中,随机库只支持bool、char、int、int::

返回a类型的随机数(a可以是任何类型?见上),全局生成器也会更新。以下示例返回Doubl:: IO Doubl:: IO[float]Random Stuff Do n LT-Random Rio(1,7)序列(replicat::国际燃气轮机标准发电机

用随机种子创建一个生成器。

随机::(随机a,随机g)

用生成器生成给定范围的无限列表。示例:使用42作为随机种子,返回一个包含A和Z(从A到Z)的无限列表:

随机数(a,z) (mkStdG::(随机a,随机g)

用给定的生成器生成一个无限的随机数列表。例如,使用42生成一个双精度类型列表作为随机种子:

::[双精度]

随机数的范围由类型决定。需要查文档确定具体范围,或者直接用randomRs。

注意这些都是功能性的——意思是没有副作用,特别是生成器不会更新。如果你用一个生成器生成第一个列表,然后用同一个生成器生成第二个列表…

g mkStdG::[Doubl::[Doubl:: random g::[Float]-gt[[Float]]work(r: RS)let n truncat: work ys

除了必要的打印操作之外,这纯粹是功能性的。它用生成器生成一个无限列表,然后用这个无限列表生成另一个无限列表作为答案,最后把第一个作为返回值。

我这样做是因为尽管我们今天的角色会产生一个随机数,但你通常需要很多。希望这个例子能对你有一点帮助。

上面的代码通过使用一个生成器来创建一个包含Float的无限列表。截取第一个值,将这个值展开为1到7,然后使用剩余的列表生成答案。换句话说,把输入列表分成(r:rs),r决定生成列表的长度(1到。7)、答案会在rs之后计算。

::(随机g) gt g -gt (g,g)

用一个随机种子创建两个不同的生成器,否则重用同一个种子是不明智的。

g mkStdGen 42(ga,gb)拆分g -不要在其他地方使用g

如果您想要创建两个以上的发生器,可以对其中一个新发生器使用拆分:

g mkStdGen 42(ga,g) split g(gb,gc) split g -不要在其他地方使用g,g

我们可以用split得到两个生成器,这样就可以生成两个随机列表。

c lt- randomRIO (a,z)0

它将生成器一分为二,然后生成两个列表。

我在主程序中硬编码了随机种子。正常情况下,你可以从其他地方获得随机种子——从输入,从文件,从时间,或者从一些设备。

这些都可以在主程序中实现,因为它们可以在IO monad中访问。

您还可以通过getStdGen获得全局生成器:

c lt-随机里奥(a,z)1

【C语言】随机数种子的设置?

这方面我之前了解过一点,不知道能不能帮到你。

我记得函数srand是用来生成一个范围的,应该是从一个标准时间到现在时间的秒的范围。然后rand函数从这个范围中取一个随机值。他的返回值是一个介于0和RAND_MAX之间的随机数,在stdlib.h I don 我记不清具体有多少了。。

生成器 列表 种子 范围

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。