编写自己的函数以在C ++中创建统一的随机分布

时间:2018-05-06 19:14:24

标签: c++ random

我知道有一些库提供了生成随机分布的函数。好吧,我想编写自己的函数,

  1. 创建统一分布
  2. 创建指数分布
  3. 为此,我创建了一个线性同余生成器:

    long Module::LCG() 
    {
        RN = (16807*RN)%(2^31-1);
        return RN;
    }
    

    现在,我不知道该怎么办。为了统一分布,我需要有一个生成数字所在的区间,以及平均值和标准差:

    long Module::createUniform(int min, int max)
    {
        for(int i=min; i<=max ;i++)
        {
         LCG();    //can I invoke LCG() here ? 
        }
    }
    

    我在这里错过了平均值和标准偏差,但不知道如何包含它们。此外,createUniformLCG()都是类Module的公共函数。函数createUniform甚至可以调用LCG()吗? 哦,你的RN的初始种子是1000.我不知道创建LCG是否有更好的方法,而不仅仅是为RN选择一个初始值?

    好吧,显然我自己写这些功能并不是很聪明。所以我做了一些改变:

    long Module::LCG() 
    {
        RN = (16807*RN)%(2 << 31 -  1); // '<<' corresponds to a left-shift of the binary number
        return RN;
    }
    
    long Module::createUniform(int min, int max)
    {
        std::uniform_int_distribution<int> distribution(min,max); //part of 'random' - library
        int p[max-min] = {};
        for(int i=min; i<=max ;i++)
        {
         p[i] = distribution(LCG(),LCG());   // can I invoke LCG() by createUniform ?
        }
    }
    

    会不会喜欢这个工作?

0 个答案:

没有答案