如题已经有一个黑盒函数 会生成均匀分布的随机数 0,1
需要构造一个随机函数,生成0~N之间均匀分布的随机数
利用0,1构造一0~2^K之间的随机数 (K = ceiling(log(N)))
如果生成的随机数大于N,则重新计算。否则返回此随机数。结果是均匀分布的。
代码如下:
#include "../Lib/randomize.h"
#include <iostream>
#include <map>int rand01()
{return RNG::getInstance().getInteger() % 2;
}#define N (10)int random(int num)
{int result = 0;int upperbound = 1;while (upperbound < (num + 1))upperbound *= 2;do{result = 0;int nBound = upperbound;while ((nBound /= 2) > 0)result += nBound * rand01();} while (result > num);return result;
}int main(int argc, char **argv)
{printf("Randomize test 1,000,000 of rand01 result:\n");long long resultN[N + 1] = {0};for (long long i = 0; i < 10000