【发布时间】:2011-06-28 06:13:06
【问题描述】:
给定一个随机源(随机比特流的生成器),如何在给定范围内生成一个均匀分布的随机浮点值?
假设我的随机源看起来像:
unsigned int GetRandomBits(char* pBuf, int nLen);
我想实现
double GetRandomVal(double fMin, double fMax);
注意事项:
- 我不希望结果精度受到限制(例如只有 5 位)。
- 必须严格均匀分布
- 我不是要求对现有库的引用。我想知道如何从头开始实施它。
- 对于伪代码/代码,C++ 将不胜感激
【问题讨论】:
-
为什么要重新发明轮子?所有平台都有很好的(伪)随机来源。
-
听起来很像我在谷歌工作时遇到的一个面试问题!
-
您是否考虑过在提供的范围内不完全有 2^n 个可能值的可能性?统一到底有多统一? :)
-
@the JinX:伪随机和实际随机是完全不同的野兽......考虑制作一次性加密垫 - 你不会用 rand() 这样做;-P
-
@the JinX:问题是关于如何将现有的“良好随机源”位变成均匀分布的随机源doubles.