Saya menerapkan hashmap dalam C sebagai bagian dari proyek yang sedang saya kerjakan dan menggunakan sisipan acak untuk mengujinya ketika saya perhatikan bahwa rand()
di Linux tampaknya mengulangi angka jauh lebih sering daripada di Mac. RAND_MAX
adalah 2147483647 / 0x7FFFFFFF di kedua platform. Saya telah menguranginya menjadi program pengujian ini yang membuat array byte- RAND_MAX+1
panjang, menghasilkan RAND_MAX
angka acak, mencatat jika masing-masing adalah duplikat, dan memeriksanya dari daftar seperti yang terlihat.
#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);
}
Linux secara konsisten menghasilkan sekitar 790 juta duplikat. Mac secara konsisten hanya menghasilkan satu, sehingga loop melalui setiap nomor acak yang dapat dihasilkannya hampir tanpa berulang. Adakah yang bisa menjelaskan kepada saya bagaimana ini bekerja? Saya tidak dapat mengatakan hal yang berbeda dari halaman manual, tidak bisa membedakan RNG mana yang digunakan, dan tidak dapat menemukan apa pun secara online. Terima kasih!