问题描述
问题是这段代码每次运行时都会产生相同的值。但是完全相同的代码在我朋友的 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;
}