আমি যে প্রকল্পে কাজ করছি তার অংশ হিসাবে সিটিতে একটি হ্যাশম্যাপ বাস্তবায়ন করছিলাম এবং এটি পরীক্ষা করার জন্য এলোমেলো সন্নিবেশ ব্যবহার করছি যখন আমি লক্ষ্য করেছি যে 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 মিলিয়ন নকল তৈরি করে ates ম্যাক ধারাবাহিকভাবে কেবল একটি উত্পন্ন করে, তাই এটি প্রতিটি এলোমেলো সংখ্যার মধ্য দিয়ে যায় যে এটি পুনরাবৃত্তি না করে প্রায় উত্পন্ন করতে পারে । কেউ দয়া করে আমাকে ব্যাখ্যা করতে পারেন কীভাবে এটি কাজ করে? আমি ম্যান পৃষ্ঠাগুলি থেকে আলাদা কিছু বলতে পারি না, প্রতিটি আরএনজি কোনটি ব্যবহার করছে তা বলতে পারি না এবং অনলাইনে কোনও কিছুই খুঁজে পাচ্ছি না। ধন্যবাদ!