对于C中的简单模拟,我需要生成指数随机变量.我记得在某个地方读过(但我现在找不到,我不记得为什么)使用rand()函数在固定范围内生成随机整数会产生非均匀分布的整数.因此,我想知道这段代码是否有类似的问题:
//generate u ~ U[0,1]
u = ( (double)rand() / ((double)(RAND_MAX));
//inverse of exponential CDF to get exponential random variable
expon = -log(1-u) * mean;
Run Code Online (Sandbox Code Playgroud)
谢谢!
固定范围内的随机数问题是很多人为100到200之间的数字执行此操作,例如:
100 + rand() % 100
Run Code Online (Sandbox Code Playgroud)
这不统一.但通过这样做它(或至少足够接近均匀):
u = 100 + 100 * ((double)rand() / ((double)(RAND_MAX));
Run Code Online (Sandbox Code Playgroud)
既然你正在做的事情,你应该是安全的.