我正在寻找一个种子随机数生成器,它可以创建一个数字池作为上下文。它不必太好。它用于游戏,但重要的是,游戏引擎的每个实例都有自己的数字池,这样不同的游戏实例甚至游戏的其他部分使用随机数就不会破坏确定性特征生成的数字。
目前我正在使用显然没有此功能的 rand()。
是否有任何 c 或 objective-c 生成器能够执行我想要的操作?
最佳答案
使用srand
设置种子,然后使用 rand()
:
unsigned int seed = 10; /* Choose an arbitrary value for the seed */
int r;
srand(seed); /* Set the seed */
r = rand(); /* Generate a random number */
手册页明确指出伪随机数序列可以重复(因此它是确定性的):
The
srand()
function sets its argument as the seed for a new sequence of pseudo-random integers to be returned byrand()
. These sequences are repeatable by callingsrand()
with the same seed value.
编辑(澄清):
请注意,手册页指出 srand()
既不是可重入的也不是线程安全的。
我认为“不同的游戏实例”是指不同的进程,在这种情况下可以使用它。
但是,如果您计划在同一过程中更改种子,您将无法获得所需的功能。在这种情况下,我建议改用 rand_r()
。看看this question供引用。
关于objective-c - 具有上下文的确定性随机数生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11381807/