C 11从频繁变化的范围生成随机数

问:如何从a-priory未知范围生成(多个)均匀分布的整数?在性能方面(生成的数字的数百万),首选的方式是什么?

上下文:在我的应用程序中,我必须在许多地方生成许多伪随机数.我使用单例模式生成器来保持应用程序运行的可重复性.在我的情况下,分布总是一致的,但问题是在C 11样式中预先制作分发对象的范围太多了.

我尝试过:有两个明显的解决方案,第一个是一次性分配对象,第二个是使用modulo将随机数从最宽的范围转换为所需的范围.但不知何故,我怀疑这些是最好的:)

#include <random>
#include <iostream>
#include "limits.h"
using namespace std;

mt19937 mt;
uniform_int_distribution<int> * fixeddist;
uniform_int_distribution<int> * variabledist;

// this version creates and delete dist after just one use
int getIntFromrange1(int from,int to){
    variabledist = new uniform_int_distribution<int>(from,to);
    int num = (*variabledist)(mt);
    delete variabledist;
    return num;
}

// this version contains modulo
int getIntFromrange2(int from,int to){
    int num = (*fixeddist)(mt);
    int diff = to - from;
    num = num % diff;
    return num + from;
}

int main(){ 
   mt.seed(123456);
   fixeddist= new uniform_int_distribution<int>(0,INT_MAX)

   int a = getIntFromrange1(1,10); // 1 and 10 are just for illustration
   int b = getIntFromrange2(1,10); // can change freely

   cout << "a: " << a << endl; // a: 6
   cout << "b: " << b << endl; // b: 9

   getchar();
}

重复的问题

Vary range of uniform_int_distribution

解决方法

我会做
int getIntFromrange1(int from,int to){
    std::uniform_int_distribution<int> dist(from,to);
    return dist(mt);
}

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...