c - C语言独立随机发生器

标签 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;
}

还有更好的方法吗?

最佳答案

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

虽然您可以轻松地自己构建一些东西,但我推荐 Gnu Scientific Library ,它有许多不同的高质量 PRNG,还有一个很好的抽象接口(interface),在这个随机流设置中很容易使用。

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

关于c - C语言独立随机发生器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37396995/

相关文章:

javascript - 在随机 Javascript 中将 RGB 值转换为 HSL 值

c++ - 在性能方面,生成随机书籍的最佳方法是什么?

c - C中带有2D数组的指针算术

c - 用 C 写入 CSV 文件

c - .o 文件怎么打开?

php - 在 PHP 中生成快速伪随机数据

windows - 是否可以将熵从硬件 RNG 添加到 Windows CryptoAPI?

c - uv_fs_open : flags and mode on Windows

c - 使用冒泡排序对字符串数组进行排序

c - C中线性同余发生器的快速模乘模素数