प्रत्येक संख्या को कुल से विभाजित करने पर आपको वह वितरण नहीं मिल सकता है जो आप चाहते हैं। उदाहरण के लिए, दो संख्याओं के साथ, युग्म x, y = random.random (), random.random () वर्ग 0 <= x <1, 0 <= y <1 पर समान रूप से एक बिंदु चुनता है। मूल "x", बिंदु (x, y) से रेखा पर x (y, 1) की रेखा से मूल (x, y) तक के योग से विभाजित करना। अंक (0.5,0.5) के पास (0.1,0.9) के पास अंक की तुलना में बहुत अधिक होने की संभावना होगी।
दो चर के लिए, फिर, x = random.random (), y = 1-x ज्यामितीय रेखा खंड के साथ एक समान वितरण देता है।
3 चर के साथ, आप एक घन में एक यादृच्छिक बिंदु उठा रहे हैं और प्रक्षेपित कर रहे हैं (मूल रूप से, मूल रूप से), लेकिन त्रिकोण के केंद्र के पास बिंदुओं के पास बिंदुओं की तुलना में अधिक संभावना होगी। परिणामी बिंदु x + y + z समतल में एक त्रिभुज पर हैं। यदि आपको उस त्रिकोण में अंक के निष्पक्ष विकल्प की आवश्यकता है, तो स्केलिंग अच्छा नहीं है।
समस्या एन-आयामों में जटिल हो जाती है, लेकिन आप कम सटीकता (लेकिन उच्च सटीकता, जो आप सभी प्रयोगशाला विज्ञान के प्रशंसकों के लिए प्राप्त कर सकते हैं!) का अनुमान है कि गैर-नकारात्मक पूर्णांक के सभी n-tuples के सेट से समान रूप से जोड़कर। एन, और फिर उनमें से प्रत्येक को एन द्वारा विभाजित करना।
मैं हाल ही में एक एल्गोरिथ्म के साथ आया था कि मामूली आकार के एन के लिए, एन। यह आपको 6-अंकों के रैंडम देने के लिए n = 100 और N = 1,000,000 के लिए काम करना चाहिए। मेरा जवाब यहां देखें:
विवश यादृच्छिक संख्याएँ बनाएँ?