C中的独立随机生成器

时间:2016-05-23 17:22:53

标签: c random

我知道在C中我们可以使用rand()生成随机数并使用srand()来设置种子。 但是我现在想要一个独立的随机生成器(比如一个变量,或者定义一个类)。

通过独立随机数生成器,我的意思是:在程序中有多个部分使用随机性。如果我使用srand()修改一个部分的种子,其他部分的随机性会受到影响。这就是为什么我想要一个独立的结构来控制随机性的原因。 我看到了这个:

unsigned long next=1;
int rand(void) /* NOT RECOMMENDED (see text) */
{
    next = next*1103515245 + 12345;
    return (unsigned int)(next/65536) % 32768;
}
void srand(unsigned int seed)
{
    next=seed;
}

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您描述的概念有时称为随机流随机同步

虽然你可以轻松地自己构建一些东西,但我推荐Gnu Scientific Library,它有许多不同的高质量PRNG,还有一个很好的抽象界面,在 random-stream <中很容易使用/ em>的定形的。

上面的链接为您提供了一个创建RNG对象以供进一步使用的示例。在您的情况下,您将构建多个随机流并在代码的不同部分使用它们。因此,如果确切地调用了这个随机流(并且独立于其他随机流的使用),则每个随机流仅被修改(内部状态)。