码迷,mamicode.com
首页 > 编程语言 > 详细

C语言取大随机数的问题

时间:2018-06-02 11:35:52      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:bsp   语言   排列   假设   选择   span   个数   概念   c语言   

首先rand()取得的随机数是在一定的范围内的,一般是0x7fff,即32767

那么要利用此函数取比此大的随机数该怎么办,我觉得只有一个办法,就是拼接

通常我们会犯这样的错误:即rand()*rand()这样感觉是不是取到了一个更大的随机数,因为随机乘以随机还是随机嘛,但实际上是错误的

你可以把rand()函数当做一个重复的全排列,假设现在有6个数字(取得的概率是相同的)

rand1() :1       2        3        4          5   6

 

rand2() :1       2        3        4          5   6

 

那么现在看看结果与其取得的概率(仅举两例)

rand1()*rand2()                              P

   2=1*2,2*1         1/6  *  1/6+1/6  *  1/6=2/36

   12=3*4,4*3,2*6,6*2     1/6  *  1/6+1/6  *  1/6+1/6  *  1/6+1/6  *  1/6=4/36

可以由此看出这样取是不可取的,因为获取的数字概率是不相同的,这肯定就不满足随机的概念(即每个数字被选取到的概率应该相同)。

但是拼接是可取的

比如2和12

我们可以想象成两个空位(分别代表rand1与rand2)

  ___          ___

每个空位有如下选择

  0    0

  1    1

  2    2

  3    3

  4    4

  5    5

  6    6

  7    7

  8    8

  9    9

那么  2就是0       2      所以P(x=2)=1/10*1/10=1/100

那么12就是1        2      所以P(x=12)=1/10*1/10=1/100

毫无疑问,拼接是没有任何问题的

C语言取大随机数的问题

标签:bsp   语言   排列   假设   选择   span   个数   概念   c语言   

原文地址:https://www.cnblogs.com/gambler/p/9124540.html

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