zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    ES 分组排序java实现
    java多线程中的死锁、活锁、饥饿、无锁都是什么鬼?
    Java 虚拟机对锁优化所做的努力
    Docker 核心概念、安装、端口映射及常用操作命令,详细到令人发指。
    20条最最常用的Linux命令讲解
    Linux查看系统配置常用命令
    全面认识Docker和基本指令
    25个深度学习开源数据集
    Docker 简单运用
    一小时学会C# 6
  • 原文地址:https://www.cnblogs.com/gambler/p/9124540.html
Copyright © 2011-2022 走看看