আপনার প্রশ্নের সহজ উত্তর হ'ল Math.random()
নিয়ম # 2 লঙ্ঘন করে।
এখানে আরও অনেক উত্তর উল্লেখ করেছে যে উপস্থিতির Math.random()
অর্থ এই ফাংশনটি খাঁটি নয়। তবে আমি মনে করি এটি কলঙ্কযুক্ত কেন এটি Math.random()
কলঙ্কযুক্ত ফাংশন।
সমস্ত সিউডোরডম সংখ্যা জেনারেটরের মতো, Math.random()
"বীজ" মান দিয়ে শুরু হয়। এটি তখন নিম্ন-স্তরের বিট ম্যানিপুলেশনগুলির শৃঙ্খলার জন্য বা অন্য ক্রিয়াকলাপের একটি অপ্রত্যাশিত (তবে সত্যিই এলোমেলো নয় ) আউটপুট তৈরির শুরুর জন্য সেই মানটিকে ব্যবহার করে ।
জাভাস্ক্রিপ্টে, জড়িত প্রক্রিয়াটি বাস্তবায়ন নির্ভর, এবং অন্যান্য অনেক ভাষার মতো, জাভাস্ক্রিপ্ট বীজ নির্বাচন করার কোনও উপায় সরবরাহ করে না :
বাস্তবায়ন এলোমেলো সংখ্যা জেনারেশন অ্যালগরিদমে প্রাথমিক বীজ নির্বাচন করে; এটি ব্যবহারকারী চয়ন বা পুনরায় সেট করতে পারবেন না।
এই কারণেই এই ফাংশনটি খাঁটি নয়: জাভাস্ক্রিপ্ট মূলত একটি অন্তর্নিহিত ফাংশন প্যারামিটার ব্যবহার করছে যা আপনার কোনও নিয়ন্ত্রণে নেই। এটি ডেটা থেকে প্যারামিটারটি অন্য কোথাও গণনা করা এবং সঞ্চয় করা পড়ছে, এবং তাই আপনার সংজ্ঞায় নিয়ম # 2 লঙ্ঘন করে।
আপনি যদি এটি একটি খাঁটি ফাংশন করতে চান তবে আপনি এখানে বর্ণিত বিকল্প এলোমেলো নম্বর জেনারেটরগুলির একটি ব্যবহার করতে পারেন । যে জেনারেটর কল করুন seedable_random
। এটি একটি প্যারামিটার (বীজ) লাগে এবং একটি "এলোমেলো" নম্বর দেয়। অবশ্যই, এই সংখ্যাটি মোটেও এলোমেলো নয়; এটি অনন্যভাবে বীজ দ্বারা নির্ধারিত হয়। এই জন্য এটি একটি খাঁটি ফাংশন। আউটপুট seedable_random
কেবল "এলোমেলো" অর্থে যে ইনপুটটির উপর ভিত্তি করে আউটপুট পূর্বাভাস দেওয়া কঠিন।
এই ফাংশনের খাঁটি সংস্করণে তিনটি পরামিতি নেওয়া দরকার :
function test(min, max, seed) {
return seedable_random(seed) * (max - min) + min;
}
যে কোনও প্রদত্ত ট্রিপল (min, max, seed)
প্যারামিটারের জন্য, এটি সর্বদা একই ফলাফলটি ফিরে আসবে।
মনে রাখবেন যদি আপনি আউটপুট চেয়েছিলেন seedable_random
হতে সত্যিই র্যান্ডম, আপনি বীজ এলোমেলো একটি উপায় খুঁজে বের করতে হবে চাই! এবং আপনি যে কৌশলটি ব্যবহার করেছেন তা অনিবার্যভাবে খাঁটি হবে, কারণ আপনার ফাংশনের বাইরের কোনও উত্স থেকে আপনার তথ্য সংগ্রহ করা প্রয়োজন। যেমনটি মেট্রেসিয়র এবং জেএমপিসি 26 আমাকে মনে করিয়ে দেয়, এর মধ্যে সমস্ত শারীরিক পদ্ধতির অন্তর্ভুক্ত রয়েছে: হার্ডওয়্যার এলোমেলো সংখ্যা জেনারেটর , লেন্স ক্যাপযুক্ত ওয়েবক্যাম , বায়ুমণ্ডলীয় শব্দ সংগ্রহকারী - এমনকি লাভা ল্যাম্প । এই সমস্ত ফাংশনের বাইরে গণনা করা এবং সংরক্ষণ করা ডেটা ব্যবহার করে involve
Math.random()
যা আরএনজির অবস্থার পরিবর্তন করে।