में क्यों चुना 181783497276652981और 8682522807148012चुना गया Random.java?
यहाँ जावा एसई JDK 1.7 से प्रासंगिक स्रोत कोड है:
/**
* Creates a new random number generator. This constructor sets
* the seed of the random number generator to a value very likely
* to be distinct from any other invocation of this constructor.
*/
public Random() {
this(seedUniquifier() ^ System.nanoTime());
}
private static long seedUniquifier() {
// L'Ecuyer, "Tables of Linear Congruential Generators of
// Different Sizes and Good Lattice Structure", 1999
for (;;) {
long current = seedUniquifier.get();
long next = current * 181783497276652981L;
if (seedUniquifier.compareAndSet(current, next))
return next;
}
}
private static final AtomicLong seedUniquifier
= new AtomicLong(8682522807148012L);
इसलिए, new Random()बिना किसी बीज पैरामीटर के आह्वान करने पर वर्तमान "बीज अद्वितीय" हो जाता है और इसके साथ XORs हो जाता है System.nanoTime()। फिर इसे 181783497276652981अगली बार संग्रहीत करने के लिए एक और बीज अद्वितीय बनाने के लिए उपयोग किया new Random()जाता है।
शाब्दिक 181783497276652981Lऔर 8682522807148012Lस्थिरांक में नहीं रखे जाते हैं, लेकिन वे कहीं और दिखाई नहीं देते हैं।
पहली बार में टिप्पणी ने मुझे एक आसान नेतृत्व दिया। उस लेख के लिए ऑनलाइन खोज करने से वास्तविक लेख मिलता है । 8682522807148012कागज में प्रकट नहीं होता है, लेकिन 181783497276652981प्रकट होता है - एक अन्य संख्या के विकल्प के रूप में 1181783497276652981, जो 181783497276652981एक 1पूर्वनिर्मित के साथ है ।
कागज का दावा है कि 1181783497276652981एक संख्या है जो एक रैखिक बधाई जनरेटर के लिए अच्छी "योग्यता" पैदा करती है। क्या यह संख्या केवल जावा में गलत कॉपी की गई थी? क्या 181783497276652981एक स्वीकार्य योग्यता है?
और क्यों 8682522807148012चुना गया ?
या तो संख्या के लिए ऑनलाइन खोज करने से कोई स्पष्टीकरण नहीं मिलता है, केवल यह पृष्ठ जो 1सामने गिराए गए को भी नोटिस करता है 181783497276652981।
क्या अन्य संख्याओं को चुना जा सकता था जो इन दो संख्याओं के साथ-साथ काम करते? क्यों या क्यों नहीं?
8682522807148012वर्ग के पिछले संस्करण की विरासत है, जैसा कि 2010 में किए गए संशोधनों में देखा जा सकता है । 181783497276652981Lलिखने में कोई त्रुटि वास्तव में हो रहा है और आप एक बग रिपोर्ट फ़ाइल कर सकते हैं।
seedUniquifierएक 64 कोर बॉक्स पर बेहद संरक्षित हो सकता है। एक थ्रेड-लोकल अधिक स्केलेबल होता।

