码迷,mamicode.com
首页 > 其他好文 > 详细

随机数范围拓展,如:根据(1,5)随机数生成器,生成(1,7)之内的随机数

时间:2018-09-30 12:57:36      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:随机数生成器   cti   logs   范围   bsp   映射   进制   拓展   dong   

  1. 方法一:生成两个(1,5)的随机数,这样一共是25种情况,注意这两个数是有顺序的,从这25种情况中,取前21种,每三种代表(1,7)中的一个数字,如果取到的是这21种以外的情况,丢掉重新取。

       方法二:生成三个(1,5)的随机数,分别表示一个二进制位,其中1和2映射为0,3跳过,4和5映射为1。这样产生的三位二进制数,即1-8这8个数字都是等概率的。如果产生的是8,那么丢弃即可。

  2.  rejection sampling 方法:生成两个(1,5)的随机数,产生一个两位的五进制数,5 * (random5() – 1) + random5()。这个公式能够等概率产生1-25,即第一个随机数代表:0,5,10,15,20,地位代表1,2,3,4,5。这样对这个数字(1-25的数字),采用方法一的方法,只用1-21,分7分,代表1-7,22-25这4个数字扔掉
    1.   代码:
      int random_n()
      {
          int val = 0 ;
          int t; // t为n最大倍数,且满足 t <= m * m     
          do {         
              val = m * (random_m() - 1) + random_m();     
          } while (val > t);
          return val;
      }

       

  3. 参考:
    1. http://yaronspace.cn/blog/archives/1326
    2. https://www.cnblogs.com/pangxiaodong/archive/2011/10/21/2220582.html

随机数范围拓展,如:根据(1,5)随机数生成器,生成(1,7)之内的随机数

标签:随机数生成器   cti   logs   范围   bsp   映射   进制   拓展   dong   

原文地址:https://www.cnblogs.com/looploop/p/9728669.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!