相同的 srand 种子在不同的计算机上产生不同的值

问题描述

问题是这段代码每次运行时都会产生相同的值。但是完全相同的代码在我朋友的 PC 上产生了不同的值。可能是什么原因,或者我做错了什么?

@H_404_3@#define SIZE 100

int main(void) {

    srand(14012021);
    for (int i = 0; i < SIZE; ++i) {
        if (i && i % 10 == 0)
            printf("\n");
        printf("%d,",(rand() % 2 ? 1 : -1) * (rand() % 1000));
    }
}

解决方法

相同的 srand 种子在不同的计算机上产生不同的值

是的。特定的伪随机数算法是一个实现质量问题。它们可能很简单,也可能很复杂。如果您需要跨实现保持一致的行为,则需要自带。

有趣的事实:ISO C99 标准包含有关此的操作方法:

以下函数定义了一个可移植的实现 兰特和兰特

static unsigned long int next = 1;

int rand(void)   // RAND_MAX assumed to be 32767
{
    next = next * 1103515245 + 12345;
    return (unsigned int)(next/65536) % 32768;
}

void srand(unsigned int seed) {
    next = seed;
}