我在 C 中实现了一个 hashmap 作为我正在处理的项目的一部分,并使用随机插入来测试它。我注意到rand()在 Linux 上似乎比在 Mac 上更频繁地重复数字。RAND_MAX是2147483647/0x7FFFFFFF两个平台上。我将它简化为这个测试程序,该程序RAND_MAX+1生成一个长字节数组,生成RAND_MAX随机数,注意每个数字是否重复,并将其从列表中检查出来,如所见。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main() {
size_t size = ((size_t)RAND_MAX) + 1;
char *randoms = calloc(size, sizeof(char));
int dups = 0;
srand(time(0));
for (int i = 0; i < RAND_MAX; i++) {
int r = rand();
if (randoms[r]) {
// printf("duplicate at %d\n", r);
dups++;
}
randoms[r] = 1;
}
printf("duplicates: %d\n", dups);
}
Run Code Online (Sandbox Code Playgroud)
Linux 始终生成大约 …