zoukankan      html  css  js  c++  java
  • random:uniform()

     1 uniform() ->
     2     {A1, A2, A3} = case get(random_seed) of
     3                undefined -> seed0();
     4                Tuple -> Tuple
     5            end,
     6     B1 = (A1*171) rem 30269,
     7     B2 = (A2*172) rem 30307,
     8     B3 = (A3*170) rem 30323,
     9     put(random_seed, {B1,B2,B3}),
    10     R = A1/30269 + A2/30307 + A3/30323,
    11     R - trunc(R).

    每次调用会更新进程字典里的random_seed变量,这样在同一个进程内每次调用random:uniform()时,随机数种子都不同,所以 生成的随机数都不一样(调用完random:uniform()后,可以用get(random_seed)查看更新后的种子值)。

    但是如果是不同的进程分别调用random:uniform(),因为随机种子更新的算法是一样的,所以每次各进程的随机数种子也是相同的,从而生 成的随机数也是一样的,要想让不同进程生成的随机数不同,要手动为每个进程设置不同的种子,常用的是用erlang:now,比如:

    1 random:seed(erlang:now()),
    2 random:uniform().

    不过如果每个进程调用random:seed(erlang:now())太接近,种子值会比较接近,生成的随机数也会比较接近,更好的方法是用一个单独的进程来生成种子,保证每次的种子值相差比较大:

    Seed = {random:uniform(99999), random:uniform(999999), random:uniform(999999)} 

    然后每次调用random:uniform()前从该种子生成进程获取最新的种子值,seed()之。

    本文来自:~~~

  • 相关阅读:
    centos7防火墙那些事
    CentOS7安装mysql数据库
    git回滚到任意版本
    SQL Server查看所有表大小、表行数和占用空间信息
    windows地址转发
    Apache和tomcat服务器使用ajp_proxy模块
    jdk分析工具:jps和jstack
    centos下linux运行asp网站搭建配置-mono+nginx
    reader
    solr课程学习系列-solr服务器配置(2)
  • 原文地址:https://www.cnblogs.com/labi/p/3617834.html
Copyright © 2011-2022 走看看