Erlang--随机数

[color=blue]1、普通随机[/color]
random:uniform(N)


[color=blue]2、以时间为种子[/color](这是比较常见的一种做法)但是会出现一个问题:如果两个函数同一时刻去调用;或者一个函数循环递归调用,产生的随机数就不可靠了。
random:seed(erlang:now())
random:uniform(N)


[color=blue]3、通过crypto:strong_rand_bytes(N)生成种子[/color]。N是字节数,1Bytes=8Bit,
下面例子中,12个字节,那么12*8=96,二进制解析时,就分成3等份,每份32,当然,
你也可以随意分 :shock:

<<A:32,B:32,C:32>> = crypto:strong_rand_bytes(12)
random:seed(A,B,C)或random:seed({A,B,C})
random:uniform(N)


[color=blue]4、创建一个随机种子进程,为每个访问的调用进程提供不同的种子[/color](如果不采用上面第三种方法,就可以采用这个)。如果有特殊要求:比如A,B进程同时取随机数,由于随机种子更新的算法是一样,所以会有可能A,B随机出来的数值基本相同。
Seed = {random:uniform(9999),random:uniform(9999),random:uniform(9999))
将Seed保存到进程字典或者ets(建议用ets,因为可以直接跨进程取数据,其它进程不用通过call或者异步方式来获取Seed)
random:seed(Seed)
random:uniform(N)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值