【发布时间】:2012-12-05 23:38:37
【问题描述】:
我在 C 中工作,我正在(拼命地)尝试制作一个随机生成器,它不仅可以生成 每次运行生成器时都有一个不同的数字,但每次运行程序时也有不同的序列。我测试了我在网上找到的几乎所有东西。我找到了 2 种制作好的随机发生器的好方法。 第一个是每次都使用不同的种子。但这意味着我每次都必须使用不同的随机种子,这是我一开始没有解决的问题。这是我现在正在尝试的,但这不是真的随心所欲:
int myrand(int random_seed){
random_seed = random_seed * 1103515245 +12345;
return (unsigned int)(random_seed / 65536) % 32768;
}
每次我调用该函数时,我都会将种子增加 1。
第二种方法是使用时间。时间变化,这是随机性。我也尝试了很多方法来实现这一点。我最近的尝试是在这里: Compiler error-Possible IDE error"undefined reference to gettimeofday error" 但我无法使用 gettimeofday 函数,因为我在 Windows 中工作。同样在那个问题中我没有得到任何答案。
谁能帮助我如何在 Windows 中使用 C 实现随机生成器(可能使用时间)?或者我应该使用 Unix 吗?
【问题讨论】:
-
srand()有问题吗?你可以像这样播种:srand( time(NULL) ); -
我也尝试过 srand(time(NULL)) 但我不得不延迟以等待时间更改。原因是我想一次生成大量随机数并且我不想等待 2 分钟让程序生成它们。我也尝试使用毫秒但没有成功。也许毫秒是答案,但我无法正确实施,问题是我正在使用 Windows .
-
@Dchris:在程序开始时以 一次 的时间为您的伪随机数生成器 (PRNG) 播种。然后,您可能必须确保每秒运行程序不超过一次(引入毫秒会对此有所帮助),但每次从 PRNG 中读取数字时,您不必等待一秒钟。跨度>
-
@SteveJessop:我希望这会奏效!
标签: c windows unix random time