यह प्रश्न: How to generate a random BigInteger बिगइंटर के लिए Random.nextInt (int n) के समान अर्थशास्त्र को प्राप्त करने का एक तरीका बताता है।मैं जावा में एक यादृच्छिक BigDecimal कैसे बना सकता हूँ?
मैं BigDecimal और Random.nextDouble() के लिए ऐसा करना चाहता हूं।
उपरोक्त प्रश्न में एक उत्तर एक यादृच्छिक BigInteger बनाने और फिर एक यादृच्छिक पैमाने के साथ एक BigDouble बनाने का सुझाव देता है। एक बहुत ही त्वरित प्रयोग यह एक बहुत ही बुरा विचार :) होने के लिए पता चलता
मेरे अंतर्ज्ञान है कि इस पद्धति का उपयोग पूर्णांक की आवश्यकता होगी
n-log10(R)
, जहां n में आवश्यक परिशुद्धता के अंकों की संख्या है जैसे कुछ द्वारा बढ़ाया जा रहा है आउटपुट और आर यादृच्छिक BigInteger है। इससे अंकों की सही संख्या मौजूद होनी चाहिए ताकि (उदाहरण के लिए) 1 -> 10^-64 और 10^64 -> 1.
स्केलिंग मूल्य को भी परिणामस्वरूप गिरने के लिए सही ढंग से चुना जाना चाहिए सीमा [0,1] में।
क्या किसी ने इससे पहले किया है, और क्या वे जानते हैं कि परिणाम सही तरीके से वितरित किए गए हैं या नहीं? क्या इसे हासिल करने का कोई बेहतर तरीका है?
संपादित करें: स्केल तर्क की मेरी समझ को सही करने के लिए @biziclop के लिए धन्यवाद। उपर्युक्त आवश्यक नहीं है, एक स्थिर पैमाने कारक वांछित प्रभाव है।
बाद में संदर्भ, मेरे (जाहिरा तौर पर काम कर कोड) के लिए है:
private static BigDecimal newRandomBigDecimal(Random r, int precision) {
BigInteger n = BigInteger.TEN.pow(precision);
return new BigDecimal(newRandomBigInteger(n, r), precision);
}
private static BigInteger newRandomBigInteger(BigInteger n, Random rnd) {
BigInteger r;
do {
r = new BigInteger(n.bitLength(), rnd);
} while (r.compareTo(n) >= 0);
return r;
}
यह मूल उत्तर का "यादृच्छिक पैमाने" हिस्सा था जो गलत था। यह विधि ठीक होनी चाहिए। – DJClayworth
आप 10^एन से कम वर्दी बिगइंटर बना सकते हैं जो कई पूर्णांक बनाते हैं जो [0, 10^मीटर) हैं और उन्हें संयोजित करते हैं। –
ठीक है, लेकिन इस प्रश्न की पहली वाक्य में जुड़े एक अच्छे उत्तर के साथ एक संबंधित प्रश्न है। आपका प्रस्ताव भी अच्छी तरह से काम कर सकता है, खासकर एम = 9 के साथ, random.nextInt() का उपयोग किया जा सकता है। – maaartinus