推广 热搜: 广场  Java  app  Word  营业  微信公众号  北京代理记账  商城  代理记账  商标交易 

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

   2023-04-27 企业服务招财猫120
核心提示:haskell中如何抽取随机数?随机数(我指的是伪随机数)是由显性或隐性状态产生的。这意味着在Hask::StdG::(随机a)gt(a,a)-gtIOa在给定范围内随机返回A类型的值,全局生成器将被

haskell中如何抽取随机数?

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

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

clt-randomRIO(阿,中)

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

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

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

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

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

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

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

::[双精度]

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

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

gmkStdG::[Doubl::[Doubl::randomg::[Float]-gt[[Float]]work(r:RS)letntruncat:workys

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

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

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

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

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

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

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

gmkStdGen42(ga,g)splitg(gb,gc)splitg-不要在其他地方使用g,g

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

clt-randomRIO(a,z)0

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

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

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

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

clt-随机里奥(a,z)1

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

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

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

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
合作伙伴
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  冀ICP备2023006999号-8