一段时间以来,我一直在用 C++ 中的这些随机数扯掉我的头发。
在 Python 中,我有很棒的:
random.uniform(0, 1)
每次我调用它时都会产生一个新的随机数。
C++必须有这样的东西。我在 Google 上搜索了很长时间,发现了erand48()
,我计划将其实现到我的光线追踪器中(我正在将它从 Python 翻译成 C++)。
我尝试了一个简单的测试用例,但我希望创建一个random_uniform()
总是吐出一个新随机数的函数(使用time()
AFAICT 是行不通的,因为它运行得非常快)
unsigned short Xi[3] = {0, 1, 27};
std::cout << erand48(Xi);
输出是(并且每次我调用程序时都会如此):
0.174529
我尝试使用以前的输出作为新的Xi
,像这样(Xi
定义了 s 初始值):
float random_uniform() {
long generated = erand48(Xi);
int temp = generated * 1000000;
unsigned short Xi[3] = {temp - 16, temp - 7, temp - 18};
return generated;
}
但这似乎不会产生足够随机的数字(而且它只会吐出来0
。我,不知道为什么......)。
有什么方法可以让我每次都吐出一个新的随机数?