【发布时间】:2014-04-19 02:05:04
【问题描述】:
我想返回一个范围内的统一随机值。范围的大小和最小值是预先计算的。
我正在使用广岛大学团队分发的双精度 Mersenne Twister 的参考实现。我目前正在使用dsfmt_genrand_close_open() 函数,其描述如下:
"生成并返回一个在[0, 1)范围内均匀分布的双精度伪随机数"
这是函数:
uint64_t gen_addr_in_range (uint64_t range, uint64_t low_addr) {
return (dsfmt_genrand_close_open(&dsfmt) * (range + 1)) + low_addr;
}
这个函数的输出在给定范围内是否一致?
【问题讨论】:
-
作为一个非数学家,我相信如果
dsfmt_genrand_close_open在[0,1)之间是一致的,那么如果你将它乘以一个常数乘数(范围+1)那么你应该得到同样随机的分布。不相关的一点:如果你得到一个范围内的随机地址(似乎有效),你为什么要使用 uint64_t 来存储地址?不应该是void *吗? -
这些地址是内存模拟中的数据
标签: c random statistics probability mersenne-twister