相关疑难解决方法(0)

为什么 rand() 在 Linux 上比 Mac 更频繁地重复数字?

我在 C 中实现了一个 hashmap 作为我正在处理的项目的一部分,并使用随机插入来测试它。我注意到rand()在 Linux 上似乎比在 Mac 上更频繁地重复数字。RAND_MAX2147483647/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 始终生成大约 …

c linux random macos

124
推荐指数
4
解决办法
7939
查看次数

标签 统计

c ×1

linux ×1

macos ×1

random ×1