C 语言中的独立随机生成器



我知道在 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;
}

有没有更好的方法?

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

虽然你可以很容易地自己构建一些东西,但我推荐 Gnu 科学库,它有许多不同的高质量 PRNG,还有一个很好的抽象界面,在这个随机流设置中很容易使用。

上面的链接为您提供了一个示例,其中创建了 RNG 对象以供进一步使用。在您的情况下,您将构建多个随机流并在代码的不同部分中使用这些流。因此,每个随机流只有在调用此随机流时才被修改(内部状态)(并且独立于其他随机流的用法)。

最新更新