Üzerinde çalıştığım bir projenin parçası olarak C'de bir hashmap uyguluyordum ve rand()
Linux'ta sayıları Mac'ten çok daha sık tekrarladığını fark ettiğimde test etmek için rastgele ekler kullanıyordum . RAND_MAX
her iki platformda da 2147483647 / 0x7FFFFFFF'dir. Ben bir bayt dizi yapar RAND_MAX+1
-long, RAND_MAX
rastgele sayılar üretir , her bir yinelenen olup olmadığını notları ve görüldüğü gibi listeden denetler bu test programına düşürdüm .
#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 sürekli olarak yaklaşık 790 milyon kopya üretir. Mac sürekli olarak sadece bir tane üretir, bu yüzden neredeyse tekrarlamadan üretebileceği her rastgele sayıdan geçer . Birisi bana bunun nasıl çalıştığını açıklayabilir mi? Man sayfalarından farklı bir şey söyleyemem, her birinin hangi RNG'yi kullandığını söyleyemem ve çevrimiçi bir şey bulamıyorum. Teşekkürler!