uniform(0, 1)উত্পাদন করতে পারে 0, তবে তা কখনও উত্পাদন করতে পারে না1 ।
ডকুমেন্টেশন জানায় যে শেষবিন্দু b পারে উত্পাদিত মান অন্তর্ভুক্ত করা:
bসমীকরণের ভাসমান-পয়েন্ট রাউন্ডিংয়ের উপর নির্ভর করে শেষ-পয়েন্টের মানটি সীমাতে অন্তর্ভুক্ত থাকতে পারে বা নাও পারে a + (b-a) * random()।
সুতরাং uniform(0, 1), সূত্রটি 0 + (1-0) * random(), সরলীকরণে 1 * random(), 1হুবহু উত্পাদন করতে সক্ষম হতে হবে । এটি কেবল তখনই ঘটতে পারে যদি random.random()1.0 exactly. However,এলোমেলো () *never* produces1.0` হয় `
random.random()ডকুমেন্টেশন উদ্ধৃত :
[0.0, 1.0) সীমাতে পরবর্তী র্যান্ডম ভাসমান পয়েন্ট নম্বরটি ফিরুন।
স্বরলিপিটির [..., ...)অর্থ হ'ল প্রথম মানটি সমস্ত সম্ভাব্য মানের একটি অংশ, তবে দ্বিতীয়টি হয় না। random.random()সর্বাধিক কাছাকাছি মান উত্পাদন করতে হবে 1.0। পাইথনের ধরণটিfloat একটি আইইইই 754 বেস 64 ভাসমান পয়েন্ট মান , যা বহু বাইনারি ভগ্নাংশ (1/2, 1/4, 1/5, ইত্যাদি) এনকোড করে যা মান random.random()তৈরি করে এবং মানটি উত্পন্ন করে কেবল একটি যোগফল 2 ** -1(1/2) থেকে 2 ** -53(1/9007199254740992) এর মাধ্যমে এই জাতীয় 53 ভগ্নাংশের এলোমেলো নির্বাচন ।
যাইহোক, কারণ এটি মান খুব পাসে তৈরী করতে পারে 1.0, একসঙ্গে ত্রুটি ঘটতে আপনি সংখ্যাবৃদ্ধি ভাসমান যখন বিন্দু nubmers rounding সঙ্গে, আপনি করতে পারেন উত্পাদন bজন্য কিছু মান aএবং b। কিন্তু 0এবং 1সেই মানগুলির মধ্যে নয়।
নোট যা 0.0 উত্পাদন random.random() করতে পারে তাই aসর্বদা random.uniform()( a + (b - a) * 0 == a) এর সম্ভাব্য মানগুলিতে অন্তর্ভুক্ত থাকে । কারণ 2 ** 53বিভিন্ন মান রয়েছে যা random.random()উত্পাদন করতে পারে (53 53 বাইনারি ভগ্নাংশের সমস্ত সম্ভাব্য সংমিশ্রণ), 2 ** 53যা ঘটতে পারে এমন সম্ভাবনা কেবলমাত্র 1 টি (9007199254740992 তে 1)।
সুতরাং যে সর্বোচ্চ সম্ভাব্য মান random.random()উত্পাদন করতে পারে তা হ'ল 1 - (2 ** -53); b - aউচ্চতর random.random()মানগুলি দ্বারা গুণিতকালে রাউন্ডিং কিক করার জন্য কেবলমাত্র একটি ছোট পর্যাপ্ত মান বাছাই করুন । যত ছোট b - aহবে তত সম্ভাবনা তত বেশি:
>>> import random, sys
>>> def find_b():
... a, b = 0, sys.float_info.epsilon
... while random.uniform(a, b) != b:
... b /= 2
... else:
... return b
...
>>> print("uniform(0, {0}) == {0}".format(find_b()))
...
uniform(0, 4e-323) == 4e-323
যদি আপনি আঘাত করেন b = 0.0তবে আমরা 1023 বার বিভক্ত হয়েছি, উপরের মানটির অর্থ আমরা 1019 বিভাগের পরে ভাগ্যবান হয়েছি। আমি এখন পর্যন্ত সর্বাধিক মান খুঁজে পেয়েছি (উপরের ফাংশনটি দিয়ে একটি লুপের সাথে চালানো max()) হ'ল 8.095e-320(1008 বিভাগ), তবে সম্ভবত উচ্চতর মান রয়েছে। এটা সব সুযোগের খেলা। :-)
এছাড়া যদি মধ্যে নয় অনেক বিযুক্ত পদক্ষেপ ঘটতে পারে aএবং bযখন মত, aএবং bএকটি উচ্চ এক্সপোনেন্ট আছে এবং এতদূর appart হতে প্রদর্শিত হতে পারে। ভাসমান পয়েন্টের মানগুলি এখনও কেবলমাত্র আনুমানিক হয় এবং তারা এনকোড করতে পারে এমন মানগুলি সীমাবদ্ধ। উদাহরণস্বরূপ, এর মধ্যে পার্থক্য মাত্র 1 বাইনারি ভগ্নাংশ sys.float_info.maxএবং sys.float_info.max - (2 ** 970)তাই একটি 50-50 সুযোগ random.uniform(sys.float_info.max - (2 ** 970), sys.float_info.max)তৈরি হয় sys.float_info.max:
>>> a, b = sys.float_info.max - (2 ** 970), sys.float_info.max
>>> values = [random.uniform(a, b) for _ in range(10000)]
>>> values.count(sys.float_info.max) # should be roughly 5000
4997
X ~ U(0,1), তারপরP(X=x)হয় প্রায় নিশ্চয় এক্স সব মানের জন্য 0,। (এটি হ'ল অন্তরালে অসীম অনেকগুলি সম্ভাব্য মান রয়েছেrandom.choice