计算机时钟作为伪随机发生器

时间:2013-01-02 05:25:50

标签: c random generator

大多数现代计算机都表现出非确定性行为,这使得无法判断两次连续调用计算机时钟之间会发生多少个时钟周期。

以下代码是使用计算机时钟的一个字节的伪随机数生成器。

unsigned long occurrences = 0;
unsigned long total = 0;

while (true) {
    if ((clock() & 0xFF) == 60) // testing ocurrences for a given number, 60 for instance
        occurrences++;
    total++;
    printf("%f\n", (float)occurrences / (float)total ); // this should be approximately 1/256 = 0.00390625
}

不包括严肃的应用程序,例如encription,它可以用于游戏的移动平台。

我想知道这种实施的优点和缺点是什么。

2 个答案:

答案 0 :(得分:1)

你应该使用联合而不是像这样的指针进行“拆分”。

我同意随机数字和时钟是两个完全不同的东西,而你提出的更多的陈述不是提问。

答案 1 :(得分:1)

您错过了使用rand()或更具体地srand()的正确方法。

您需要在程序运行期间只调用一次srand()。 不要在循环中调用srand()。 在每次致电srand()之前,请勿致电rand()。 确保正确srand()管理的最佳方法是在main()函数中调用一次,然后忘记它:之后只需使用rand()

#include <stdlib.h> /* rand, srand */
#include <time.h>   /* time */

int main(void) {
    /* initialization */
    srand(time(NULL));

    /* input, possibly calling rand() */

    /* process, possibly calling rand() */

    /* output, possibly calling rand() */

    /* termination */
    return 0;
}