जब मैं काम कर रहा था और जब मैंने देखा कि rand()
लिनक्स पर मैक की तुलना में कहीं अधिक बार संख्याओं को दोहराता प्रतीत होता है, तो मैं इसे परीक्षण करने के लिए यादृच्छिक आवेषण का उपयोग कर रहा हूं और सी में एक हैशमैप को सी में लागू कर रहा था । 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);
}
लिनक्स लगातार 790 मिलियन डुप्लिकेट बनाता है। मैक लगातार केवल एक उत्पन्न करता है, इसलिए यह प्रत्येक यादृच्छिक संख्या के माध्यम से लूप करता है कि यह लगभग दोहराए बिना उत्पन्न कर सकता है । क्या कोई मुझे समझा सकता है कि यह कैसे काम करता है? मैं मैन पेजों से अलग कुछ भी नहीं बता सकता, यह नहीं बता सकता कि कौन सा आरएनजी प्रत्येक का उपयोग कर रहा है, और ऑनलाइन कुछ भी नहीं मिल सकता है। धन्यवाद!