转载请注明,来自:http://blog.csdn.net/skyman_2001
看它的代码实现:
uniform() -> {A1, A2, A3} = case get(random_seed) of undefined -> seed0(); Tuple -> Tuple end, B1 = (A1*171) rem 30269, B2 = (A2*172) rem 30307, B3 = (A3*170) rem 30323, put(random_seed, {B1,B2,B3}), R = A1/30269 + A2/30307 + A3/30323, R - trunc(R).
每次调用会更新进程字典里的random_seed变量,这样在同一个进程内每次调用random:uniform()时,随机数种子都不同,所以生成的随机数都不一样(调用完random:uniform()后,可以用get(random_seed)查看更新后的种子值)。
但是如果是不同的进程分别调用random:uniform(),因为随机种子更新的算法是一样的,所以每次各进程的随机数种子也是相同的,从而生成的随机数也是一样的,要想让不同进程生成的随机数不同,要手动为每个进程设置不同的种子,常用的是用erlang:now,比如:
random:seed(erlang:now()), random:uniform().
不过如果每个进程调用random:seed(erlang:now())太接近,种子值会比较接近,生成的随机数也会比较接近,更好的方法是用一个单独的进程来生成种子,保证每次的种子值相差比较大:
Seed = {random:uniform(99999), random:uniform(999999), random:uniform(999999)}
然后每次调用random:uniform()前从该种子生成进程获取最新的种子值,seed()之。
以上是转截
下面来一张图 说明一下在新的进程中调用一下random:seed()的必要性:
相关推荐
Erlang入门:构建application练习3,实例演示如果构建一个最简单的Erlang Application
编写分布式的Erlang程序:陷阱和对策
Erlang入门:构建application练习5(监督树),以实例完全演示监督树的用法,Erlang入门必须知道的那点事
Erlang入门:构建application练习4(进程link的作用),实例演示进程link的作用及效果
Erlang随机变量 ... 如果未提供dims参数,则该函数从Erlang分布返回一个随机抽奖。 var out ; // Set seed random . seed = 2 ; out = random ( 5 ) ; // returns [ ~1.416, ~1.285, ~0.112, ~1.103, ~2.01
《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF
erlang文献及资料汇总 入门资料: erlang中文手册(R11B 文档译文,最适合入门) erlang位运算与二进制解析 erlang二进制高效编程 erlang异常处理详解 开发经验: 面对软件错误构建可靠的分布式系统 编写分布式的 ...
主要介绍了Erlang初学:Erlang的一些特点和个人理解总结,本文总结了函数式编程、一切都是常量、轻量进程、进程端口映射及典型缺点等内容,需要的朋友可以参考下
孟岩谈Erlang:并行计算和云计算,详细介绍了新一代编程语言Erlang在并行计算和云计算方面的特性
erlang最新 api
累积分布函数 分布。 随机变量的为 其中k是形状参数, lambda是速率参数。 安装 $ npm install distributions-erlang-cdf 要在浏览器中使用,请使用 。 用法 var cdf = require ( 'distributions-erlang-cdf' )...
分布矩生成函数(MGF)。 随机变量的为 对于t < lambda> 0是分布的速率参数。 在t >= lambda的情况下,未定义MGF,并且此模块返回NaN 。 安装 $ npm install distributions-erlang-mgf 要在浏览器中使用,请使用...
博文链接:https://maxtqm.iteye.com/blog/118429
confetti, Erlang配置提供程序/应用程序 纸屑五彩纸屑是你的Erlang应用程序的配置提供程序。基本上是 application:get_env/2 在类固醇上。特性管理控制台可以通过telnet维护部门访问将为你 love在运行时重新加载( ...
Erlang 二进制模式匹配是它最好的特性之一,也是它最简洁的语法,那么为什么不将它也应用于函数保护呢? 鉴于此功能: my_func ( Value ) when is_binary ( Value ) -> Value . 可以简化为: my_func ( Value / ...
Introducing Erlang: Getting Started in Functional Programming by Simon St. Laurent English | 6 Mar. 2017 | ASIN: B06XHSP5SH | 212 Pages | AZW3 | 1.85 MB If you’re new to Erlang, its functional style...
计算Erlang分布的分位数函数。 p可以是0到1之间的number , array ,typed array或matrix 。 var matrix = require ( 'dstructs-matrix' ) , mat , out , x , i ; out = quantile ( 0.25 ) ; // returns ~0....
Erlang特性: ● 并发性 - Erlang支持超大量级的并发进程,并且不需要操作系统具有并发机制。 ● 分布式 - 一个分布式Erlang系统是多个Erlang节点组成...●函数式编程 ●动态类型 ●及早求值或严格求值 ●支持脚本运行
mecks_unit:一个简单的Elixir软件包,可以使用Erlang的:meck库优雅地模拟(异步)ExUnit测试中的模块功能
发给Erlang的消息只是Haskell中的函数调用,而来自Erlang的消息则传递到MVars。 简短的例子 我们通过一个简单的工作示例介绍erlang库。 我们将编写一个简单的“ Hello,Erlang!”程序。 让我们从Haskell代码开始...