কেন র‌্যাঙ্ক () ম্যাকের চেয়ে লিনাক্সে প্রায়শই সংখ্যা পুনরাবৃত্তি করে?


86

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


4
যেহেতু র‌্যাণ্ড () 0_RAND_MAX সহ অন্তর্ভুক্ত করে মানগুলি দেয়, তাই আপনার অ্যারের RA आकारের আকার প্রয়োজন END_BOLD + 1
ব্লাস্টফারনেস

21
আপনি লক্ষ করেছেন যে RAND_MAX / e ~ = 790 মিলিয়ন। এছাড়াও (1-1 / n) the n এর সীমাটি অনন্তের কাছে পৌঁছায় 1/1।
ডেভিড শোয়ার্টজ

3
@ ডেভিডশওয়ার্টজ যদি আমি আপনাকে সঠিকভাবে বুঝতে পারি তবে এটি বুঝতে পারে কেন লিনাক্সে এই সংখ্যাটি নিয়মিতভাবে প্রায় 790 মিলিয়ন হয়। আমি তখন প্রশ্নটি অনুমান করি: কেন / কীভাবে ম্যাক সেই বহুবার পুনরাবৃত্তি করে না ?
থেরন এস

26
রানটাইম লাইব্রেরিতে PRNG এর জন্য কোনও মানের প্রয়োজন নেই। কেবলমাত্র সত্য প্রয়োজন একই বীজের সাথে পুনরাবৃত্তিযোগ্য। স্পষ্টতই, আপনার লিনাক্সের PRNG এর মান আপনার ম্যাকের চেয়ে ভাল।
পিএমজি

4
@ ছাক্স হ্যাঁ, তবে যেহেতু এটি গুণের উপর ভিত্তি করে, রাষ্ট্রটি কখনই শূন্য হতে পারে না বা ফলাফল (পরবর্তী অবস্থা )ও শূন্য হতে পারে। উত্স কোডের উপর ভিত্তি করে এটি শূন্যের সাথে বীজযুক্ত হলে বিশেষ কেস হিসাবে শূন্যের জন্য যাচাই করে, তবে ক্রমের অংশ হিসাবে এটি কখনও শূন্য উত্পাদন করে না।
আরক্কু

উত্তর:


118

প্রথমে এটি MacOS মত শব্দ হতে পারে যদিও rand()একরকম ভাল কোনো সংখ্যা পুনরাবৃত্তি না হয়, এক নোট উচিত যে সংখ্যার এই পরিমাণ উত্পন্ন সঙ্গে এটি করা হয় বলে আশা করা প্রায় (সদৃশ প্রচুর আসলে দেখতে 790 মিলিয়ন, বা (2 31 -1 ) / )। একইভাবে সংখ্যা অনুসারে ক্রমানুসারে পুনরাবৃত্তি করার ফলে কোনও সদৃশও তৈরি হবে না, তবে খুব এলোমেলোভাবে বিবেচিত হবে না। সুতরাং লিনাক্স rand()বাস্তবায়ন এই পরীক্ষায় সত্যিকারের এলোমেলো উত্স থেকে পৃথক পৃথক, যদিও ম্যাকোস rand()নেই।

আরেকটি জিনিস যা প্রথম নজরে আশ্চর্যজনকভাবে উপস্থিত হয় তা হ'ল ম্যাকস কীভাবে এত সহজে rand()ডুপ্লিকেটগুলি এড়াতে পরিচালনা করতে পারে। এ খুঁজছি তার সোর্স কোড , আমরা বাস্তবায়ন নিম্নরূপ হতে খুঁজে পেয়েছেন:

/*
 * Compute x = (7^5 * x) mod (2^31 - 1)
 * without overflowing 31 bits:
 *      (2^31 - 1) = 127773 * (7^5) + 2836
 * From "Random number generators: good ones are hard to find",
 * Park and Miller, Communications of the ACM, vol. 31, no. 10,
 * October 1988, p. 1195.
 */
    long hi, lo, x;

    /* Can't be initialized with 0, so use another value. */
    if (*ctx == 0)
        *ctx = 123459876;
    hi = *ctx / 127773;
    lo = *ctx % 127773;
    x = 16807 * lo - 2836 * hi;
    if (x < 0)
        x += 0x7fffffff;
    return ((*ctx = x) % ((unsigned long) RAND_MAX + 1));

RAND_MAXক্রমটি পুনরাবৃত্তি হওয়ার আগে এটি 1 এর মধ্যে সমস্ত সংখ্যার মধ্যে অন্তর্ভুক্ত, ঠিক একবার অন্তর্ভুক্ত। যেহেতু পরবর্তী রাজ্যটি গুণণের উপর ভিত্তি করে, রাজ্যটি কখনই শূন্য হতে পারে না (বা ভবিষ্যতের সমস্ত রাজ্যগুলিও শূন্য হবে)। সুতরাং আপনি পুনরাবৃত্তি সংখ্যাটি দেখতে পাচ্ছেন প্রথমটি এবং শূন্যটি এমনটি যা কখনই ফিরে আসে না।

অ্যাপল তাদের ডকুমেন্টেশনে আরও ভাল র্যান্ডম সংখ্যার জেনারেটর ব্যবহারের প্রচার করছে এবং যতক্ষণ না ম্যাকোস (বা ওএস এক্স) বিদ্যমান রয়েছে, সুতরাং এর গুণমান rand()সম্ভবত গুরুত্বপূর্ণ হিসাবে ধরা হয় না, এবং তারা কেবল একটির সাথে আটকে আছে সহজতম সিউডোর্যান্ডম জেনারেটর উপলব্ধ। (যেমন আপনি উল্লেখ করেছেন, তাদের পরিবর্তে rand()ব্যবহারের জন্য একটি সুপারিশ নিয়ে মন্তব্য করা হয়েছে arc4random()))

সম্পর্কিত নোটে, আমি সবচেয়ে সহজ সিউডোরেন্ডম নম্বর জেনারেটরটি দেখতে পেলাম যা এলোমেলোতার জন্য এই (এবং আরও অনেক) পরীক্ষায় শালীন ফলাফল দেয় তা হ'ল জোরশিফট * :

uint64_t x = *ctx;
x ^= x >> 12;
x ^= x << 25;
x ^= x >> 27;
*ctx = x;
return (x * 0x2545F4914F6CDD1DUL) >> 33;

এই বাস্তবায়নটির ফলাফলটি আপনার পরীক্ষায় প্রায় 790 মিলিয়ন ডুপ্লিকেট তৈরি করে।


5
১৯৮০ এর দশকে প্রকাশিত একটি জার্নাল নিবন্ধে "জন্মদিনের সমস্যা" এর ভিত্তিতে পিআরএনজির জন্য একটি পরিসংখ্যান পরীক্ষার প্রস্তাব দেওয়া হয়েছিল।
pjs

14
"অ্যাপল তাদের ডকুমেন্টেশনে আরও ভাল এলোমেলো নম্বর জেনারেটর ব্যবহারের প্রচার করছে" -> অবশ্যই অ্যাপল arc4random()পিছনের কোডটির মতো নিয়োগ করতে পারে rand()এবং একটি ভাল rand()ফলাফল পেতে পারে। প্রোগ্রামারদের আলাদা আলাদা কোডে চালিত করার চেষ্টা করার পরিবর্তে আরও ভাল লাইব্রেরি ফাংশন তৈরি করুন। "তারা কেবল আটকে গেছে" তাদের পছন্দ।
chux

22
ম্যাকের একটি ধ্রুবক অফসেটের অভাব rand()এটি এতটাই খারাপ করে তোলে যে এটি ব্যবহারিক ব্যবহারের জন্য কার্যকর নয়: র্যান্ড ()% 7 সর্বদা 0 কেন ফিরে আসে? , র‌্যান্ড ()% 14 কেবল 6 বা 13
ফুক্লিভি

4
@ পিটারকর্ডস: এ জাতীয় প্রয়োজনীয়তা রয়েছে randযে এটি একই বীজের সাথে পুনরায় চালানো একই ক্রম উত্পাদন করে। ওপেনবিএসডি randভেঙে গেছে এবং এই চুক্তি মানছে না।
আর .. গীটহাব বন্ধ করুন ICE

8
@ আর..গিটহাবস্টোফেল্পিংসিস আপনি কি সি এর প্রয়োজনীয়তা দেখতে পান যে rand()একই বীজের সাথে লাইব্রেরির বিভিন্ন সংস্করণের মধ্যে একই ক্রম তৈরি হয়? এই ধরনের গ্যারান্টি লাইব্রেরি সংস্করণগুলির মধ্যে রিগ্রেশন পরীক্ষার জন্য কার্যকর হতে পারে, তবুও আমি এটির জন্য কোনও সি প্রয়োজনীয়তা পাই না।
chux - মনিকা পুনরায় ইনস্টল করুন

33

MacOS stdlib এ একটি অননুমোদিত র্যান্ড () ফাংশন সরবরাহ করে। আপনি এটা অ-বাছাই ছেড়ে যান, তারপর প্রথম মান এটা আউটপুট 16807, 282475249, 1622650073, 984943658 এবং 1144108930. একজন হয় দ্রুত অনুসন্ধান দেখাবে যে একটি খুব মৌলিক LCG র্যান্ডম সংখ্যা উত্পাদক এই ক্রম অনুরূপ যে iterates নিম্নলিখিত সূত্র:

x n +1 = 7 5 · x n (Mod 2 31 - 1)

যেহেতু এই আরএনজির অবস্থা সম্পূর্ণরূপে একক 32-বিট পূর্ণসংখ্যার মান দ্বারা বর্ণিত হয়েছে, তাই এর সময়কাল খুব বেশি দীর্ঘ নয়। সুনির্দিষ্টভাবে বলতে গেলে, এটি প্রতি 2 31 - 2 পুনরাবৃত্তির পুনরাবৃত্তি করে প্রতিটি মান 1 থেকে 2 31 - 2 এ আউটপুট করে ।

আমি মনে করি না লিনাক্সের সমস্ত সংস্করণের জন্য র্যান্ডের () এর একটি মানক প্রয়োগ রয়েছে, তবে একটি গ্লিবসি র‌্যান্ড () ফাংশন রয়েছে যা প্রায়শই ব্যবহৃত হয়। একক 32-বিট স্থিতি পরিবর্তকের পরিবর্তে এটি 1000 বিটের বেশি একটি পুল ব্যবহার করে, যা সমস্ত অভিপ্রায় এবং উদ্দেশ্যগুলি কখনও পুরোপুরি পুনরাবৃত্তি করার ক্রম উত্পাদন করে না। আবার, আপনি সম্ভবত আরএনজি না করেই এই আরএনজি থেকে প্রথম কয়েকটি আউটপুট মুদ্রণ করে আপনার সংস্করণটি খুঁজে পেতে পারেন। (গ্লিবিসি র‌্যান্ড () ফাংশনটি 1804289383, 846930886, 1681692777, 1714636915 এবং 1957747793 সংখ্যা তৈরি করে))

সুতরাং আপনি লিনাক্সে আরও সংঘর্ষের কারণ হয়ে উঠছেন (এবং ম্যাকোজে খুব কমই কোনও) র‍্যান্ডের লিনাক্স সংস্করণটি মূলত আরও এলোমেলো।


5
একটি অ-বাছাই rand()সঙ্গে এক মত আবশ্যক আচরণsrand(1);
PMG

5
rand()ম্যাকোস-এর জন্য সোর্স কোডটি উপলভ্য: opensource.apple.com/source/Libc/Libc-1353.11.2/stdlib/FreeBSD/… এফডাব্লুআইডাব্লু, উত্স থেকে সংকলিত এর বিপরীতে আমি একই পরীক্ষা চালিয়েছি এবং ফলস্বরূপ এটি ফলশ্রুতিতে আসে না শুধুমাত্র একটি সদৃশ। অ্যাপল অন্যান্য র্যান্ডম সংখ্যার জেনারেটরগুলির (যেমন arc4random()সুইফ্ট গ্রহণের আগে) তাদের উদাহরণ এবং ডকুমেন্টেশনের ব্যবহারের প্রচার করছে, সুতরাং rand()তাদের প্ল্যাটফর্মে নেটিভ অ্যাপ্লিকেশনগুলিতে সম্ভবত সম্ভবত এটি ব্যবহার খুব বেশি সাধারণ নয়, এটি ব্যাখ্যা করতে পারে যে এটি কেন ভাল নয়।
আরক্কু

উত্তরের জন্য ধন্যবাদ, যে আমার প্রশ্নের উত্তর দেয়। এবং (2 ^ 31) -2 এর সময়কালে ব্যাখ্যা করা হয়েছে যে কেন আমি পর্যবেক্ষণ করে ঠিক শেষে এটি পুনরাবৃত্তি করা শুরু করবে। আপনি (@ r3mainer) বলেছেন নিঃসন্দেহে rand(), কিন্তু @ আরক্কু আপাত উত্সটিতে একটি লিঙ্ক সরবরাহ করেছে। আপনারা কেউ কি জানেন যে আমি কেন আমার সিস্টেমে সেই ফাইলটি খুঁজে পাই না এবং কেন আমি কেবল int rand(void) __swift_unavailable("Use arc4random instead.");ম্যাকের মধ্যে দেখতে পাই stdlib.h? আমি মনে করি @ আরক্কু লিঙ্কযুক্ত কোডটি কেবল সংকলিত হয়েছে ... কোন লাইব্রেরিতে?
থেরন এস

1
@ থেরোনস এটি সি লাইব্রেরিতে লিপিবদ্ধ করা হয়েছে, libc /usr/lib/libc.dylib,। =)
আরক্কু

5
কোনটি সংস্করণ rand()একটি প্রদত্ত সি প্রোগ্রাম ব্যবহার করে "কম্পাইলার" বা "অপারেটিং সিস্টেম", বরং সি মান গ্রন্থাগার বাস্তবায়ন দ্বারা নির্ধারিত হয় না (যেমন, glibc, libc.dylib, msvcrt*.dll)।
পিটার ও।

10

rand()সি স্ট্যান্ডার্ড দ্বারা সংজ্ঞায়িত করা হয়, এবং সি স্ট্যান্ডার্ডটি কোন অ্যালগরিদম ব্যবহার করতে হবে তা নির্দিষ্ট করে না। স্পষ্টতই, অ্যাপল আপনার জিএনইউ / লিনাক্স বাস্তবায়নের জন্য নিকৃষ্ট অ্যালগরিদম ব্যবহার করছে: লিনাক্সটি আপনার পরীক্ষার সত্যিকারের এলোমেলো উত্স থেকে পৃথক, অন্যদিকে অ্যাপল বাস্তবায়ন চারপাশের সংখ্যাগুলিকে পরিবর্তন করে।

আপনি যদি যে কোনও মানের এলোমেলো সংখ্যা চান, তবে হয় আরও ভাল একটি পিআরএনজি ব্যবহার করুন যা এটির সংখ্যার গুণমান সম্পর্কে কমপক্ষে কিছু গ্যারান্টি দেয়, অথবা কেবল সেখান থেকে /dev/urandomবা অনুরূপ পড়তে পারে । পরে আপনাকে ক্রিপ্টোগ্রাফিক মানের সংখ্যা দেয় তবে ধীর slow এমনকি যদি এটি নিজে থেকে খুব ধীর হয় তবে /dev/urandomকিছু অন্য, দ্রুত পিআরএনজিকে কিছু দুর্দান্ত বীজ সরবরাহ করতে পারে।


জবাবের জন্য ধন্যবাদ. আমার আসলে একটি ভাল পিআরএনজি দরকার নেই, কেবলমাত্র উদ্বিগ্ন ছিল যে আমার হ্যাশম্যাপে কিছু অপরিজ্ঞাত আচরণ লুকানো ছিল, তখন আমি সেই সম্ভাবনাটি সরিয়ে দিয়ে কৌতূহলী হয়ে উঠি এবং প্ল্যাটফর্মগুলি এখনও অন্যরকম আচরণ করে।
থেরন এস

বিটিডব্লিউ এখানে একটি ক্রিপ্টোগ্রাফিক সুরক্ষিত র‌্যান্ডম সংখ্যা জেনারেটরের একটি উদাহরণ রয়েছে: github.com/divinity76/phpcpp/commit/… - তবে এটি সি এর পরিবর্তে সি ++ এবং আমি এসটিএল বাস্তবায়নকারীদের সমস্ত ভারী উত্তোলন করতে
দিচ্ছি

3
@ হানশেনরিক একটি ক্রিপ্টো আরএনজি সাধারণত ওভারকিল হয় এবং সাধারণ হ্যাশ টেবিলের জন্য খুব ধীর হয়।
প্রধানমন্ত্রী 2 রিং

1
নিখুঁতভাবে @ পিএম 2 রিং করুন। একটি হ্যাশ টেবিল হ্যাশ প্রাথমিকভাবে দ্রুত হওয়া দরকার, ভাল নয়। তবে, আপনি যদি একটি হ্যাশ টেবিল অ্যালগরিদম বিকাশ করতে চান যা কেবল দ্রুত নয় তবে শালীন, আমি বিশ্বাস করি ক্রিপ্টোগ্রাফিক হ্যাশ অ্যালগরিদমের কিছু কৌশল সম্পর্কে জানা ভাল। এটি আপনাকে সবচেয়ে চমকপ্রদ ভুলগুলি এড়াতে সহায়তা করবে যা সবচেয়ে দ্রুত হ্যাশ অ্যালগরিদমে ধাঁধা দেয়। তবুও, আমি এখানে একটি নির্দিষ্ট প্রয়োগের জন্য বিজ্ঞাপন না করতাম।
মাস্টার

@ মাস্টার যথেষ্ট সত্য। মিশ্রণ ফাংশন এবং তুষারপাতের প্রভাবের মতো জিনিস সম্পর্কে কিছুটা জানা অবশ্যই অবশ্যই একটি ভাল ধারণা । ভাগ্যক্রমে নন-ক্রিপ্টো হ্যাশ ফাংশনগুলি রয়েছে এমন ভাল বৈশিষ্ট্য যা খুব বেশি গতি ত্যাগ করে না (যখন সঠিকভাবে প্রয়োগ করা হয়), যেমন এক্সএক্স্যাশ, মুরমার 3, বা সিফ্যাশ।
প্রধানমন্ত্রী 2 রিং

5

সাধারণভাবে, ফলাফলগুলিতে উচ্চ-অর্ডার বিটের তুলনায় কম অর্ডার বিটগুলি কম র্যান্ডমনেস প্রদর্শন করার কারণে র্যান্ড / শ্রান্ড জুটি দীর্ঘ সময়ের জন্য অবচয় হিসাবে বিবেচিত হয়। এটি আপনার ফলাফলগুলির সাথে কিছু করার বা নাও থাকতে পারে, তবে আমি মনে করি এটি এখনও মনে করার জন্য একটি ভাল সুযোগ আছে যদিও কিছু র্যান্ড / শ্রান্ড বাস্তবায়ন এখন আরও আধুনিক up )। আমার আর্চ লিনাক্স বাক্সে, নিম্নলিখিত নোটটি এখনও র্যান্ডের জন্য ম্যান পৃষ্ঠাতে রয়েছে (3):

  The versions of rand() and srand() in the Linux C Library use the  same
   random number generator as random(3) and srandom(3), so the lower-order
   bits should be as random as the higher-order bits.  However,  on  older
   rand()  implementations,  and  on  current implementations on different
   systems, the lower-order bits are much less random than the  higher-or-
   der bits.  Do not use this function in applications intended to be por-
   table when good randomness is needed.  (Use random(3) instead.)

এর ঠিক নীচে, ম্যান পেজটি খুব ছোট, খুব সহজ উদাহরণ প্রয়োগ করেছে যা র্যান্ড এবং শ্রান্ডের যা আপনি কখনও দেখেছেন এমন একটি সহজ এলসি আরএনজি সম্পর্কে এবং একটি ছোট RAND_MAX রয়েছে। আমি মনে করি না তারা সি স্ট্যান্ডার্ড লাইব্রেরিতে যা আছে তা যদি তারা কখনও করে তবে তা মিলছে। বা কমপক্ষে আমি আশা করি না।

সাধারণভাবে, আপনি যদি স্ট্যান্ডার্ড লাইব্রেরি থেকে কিছু ব্যবহার করতে যাচ্ছেন তবে আপনি যদি পারেন তবে এলোমেলো ব্যবহার করুন (ম্যান পেজটি এটি পসিক্স স্ট্যান্ডার্ড হিসাবে পজিক্স ১.২-২০০১ এ তালিকাভুক্ত করে, তবে র্যান্ড স্ট্যান্ডার্ড ভাবে সি এমনকি মানক হওয়ার আগেই ফিরে আসে) । বা আরও ভাল, ক্রমিক খুলুন সংখ্যাযুক্ত রেসিপিগুলি (বা এটি অনলাইনে সন্ধান করুন) বা নুথ এবং একটি প্রয়োগ করুন। এগুলি সত্যই সহজ এবং আপনার বেশিরভাগ গুণাবলীর সাথে প্রয়োজনীয় উদ্দেশ্যগুলির সাথে একটি সাধারণ উদ্দেশ্য আরএনজি রাখার জন্য আপনাকে একবারই এটি করা দরকার এবং এটি জ্ঞাত মানের।


প্রসঙ্গে ধন্যবাদ। আমার আসলে উচ্চমানের এলোমেলো প্রয়োজন নেই, এবং মরচে থাকলেও MT19937 প্রয়োগ করেছেন implemented দুটি প্ল্যাটফর্ম কেন অন্যরকম আচরণ করে তা কীভাবে খুঁজে পাওয়া যায় সে সম্পর্কে বেশিরভাগই আগ্রহী ছিল।
থেরন এস

1
কখনও কখনও সর্বোত্তম প্রশ্নগুলি কঠোর প্রয়োজনের পরিবর্তে সাধারণ আগ্রহের বাইরে জিজ্ঞাসা করা হয় - মনে হয় যে এগুলি প্রায়শই কৌতূহলের একটি নির্দিষ্ট দিক থেকে ভাল উত্তরগুলির স্যুট হয় get ইতিমধ্যে তাদের মধ্যে একটি। আসল এবং আসল হ্যাকারগুলি এখানে সমস্ত কৌতূহলী লোকদের কাছে।
থমাস কামমেয়ার

এটি মজার বিষয় যে পরামর্শটি ছিল র‌্যাণ্ড () ভাল করার পরিবর্তে "র্যান্ড () ব্যবহার বন্ধ করা"। স্ট্যান্ডার্ডের কিছুই কখনও বলে না যে এটি একটি নির্দিষ্ট জেনারেটর হতে হবে।
পাইপ

2
@ পাইপ যদি rand()'আরও ভাল' বানানোর অর্থ এটি ধীর করা হয় (এটি সম্ভবত - ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত এলোমেলো সংখ্যাগুলিকে প্রচুর পরিশ্রম করে), তবে প্রান্তিকভাবে আরও পূর্বাভাস দেওয়ার পরেও সম্ভবত এটি দ্রুত রাখা ভাল। দৃষ্টিতে কেস: আমাদের একটি প্রযোজনার অ্যাপ্লিকেশন ছিল যা শুরু করতে যুগে যুগে সময় লেগেছিল, যা আমরা একটি আরএনজির কাছে আবিষ্কার করেছি যার প্রারম্ভিক পর্যায়ে পর্যাপ্ত এনট্রোপি উত্পন্ন হওয়ার জন্য অপেক্ষা করা দরকার ... দেখা গেল এটি এত সুরক্ষিত হওয়ার দরকার নেই, তাই এটির পরিবর্তে একটি 'খারাপ' আরএনজি ছিল একটি বড় উন্নতি।
15
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.