
Java Random स्टेट रिप्लिकेशन टूल जो देखे गए आउटपुट से आंतरिक स्टेट को पुनर्प्राप्त करके भविष्य के रैंडम मानों की भविष्यवाणी करता है, जो LCG-आधारित PRNG की कमजोरियों को प्रदर्शित करता है।
node फ़ोल्डर में README देखें
java.util.Random के nextDouble से उत्पन्न एक double दिए जाने पर, उसी स्थिति (state) के साथ एक Random फिर से बनाएँ। इस ReplicatedRandom का उपयोग फिर मूल Random के भविष्य के मानों की भविष्यवाणी करने के लिए किया जा सकता है।
उदाहरण:
Random r = new Random();
ReplicatedRandom rr = new ReplicatedRandom();
rr.replicateState(r.nextDouble());
System.out.println(r.nextDouble() == rr.nextDouble()); // True
System.out.println(r.nextDouble() == rr.nextDouble()); // True
System.out.println(r.nextDouble() == rr.nextDouble()); // True
यह Math.random() के साथ भी काम करता है क्योंकि यह आंतरिक रूप से Random का उपयोग करता है:
ReplicatedRandom rr = new ReplicatedRandom();
rr.replicateState(Math.random());
System.out.println(Math.random() == rr.nextDouble()); // True
System.out.println(Math.random() == rr.nextDouble()); // True
System.out.println(Math.random() == rr.nextDouble()); // True
यह nextInt() के लिए भी काम करता है लेकिन इसके लिए दो क्रमागत मानों की आवश्यकता होती है:
Random r = new Random();
ReplicatedRandom rr = new ReplicatedRandom();
rr.replicateState(r.nextInt(), r.nextInt());
System.out.println(r.nextInt() == rr.nextInt()); // True
System.out.println(r.nextInt() == rr.nextInt()); // True
System.out.println(r.nextInt() == rr.nextInt()); // True
विवरण के लिए यह ब्लॉग पोस्ट देखें।