Neden seçildi 181783497276652981
ve 8682522807148012
seçildi Random.java
?
Java SE JDK 1.7'den ilgili kaynak kodu şöyledir:
/**
* 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);
Bu nedenle, new Random()
herhangi bir tohum parametresi olmadan çağırmak , geçerli "çekirdek benzersizleştiriciyi" alır ve onunla birlikte XOR'tur System.nanoTime()
. Daha sonra 181783497276652981
çağrıldığında saklanmak üzere başka bir tohum benzersizleştiricisi oluşturmak için kullanır new Random()
.
Değişmezleri 181783497276652981L
ve 8682522807148012L
sabitler yerleştirilir değildir, ancak bunlar başka bir yerde görünmez.
İlk başta yorum bana kolay bir ipucu veriyor. Bu makale için çevrimiçi arama yapmak asıl makaleyi verir . 8682522807148012
Kağıt görünmüyorsa, ama 181783497276652981
görünmüyor - başka bir numaraya, bir alt dize olarak 1181783497276652981
ise, 181783497276652981
bir ile 1
de başa.
Makale 1181783497276652981
, doğrusal bir eşleşik üretici için iyi bir "değer" sağlayan bir sayı olduğunu iddia ediyor . Bu numara Java'ya yanlış mı kopyalandı? Kabul 181783497276652981
edilebilir bir değeri var mı?
Ve neden 8682522807148012
seçildi?
Herhangi bir sayı için çevrimiçi arama yapmak herhangi bir açıklama getirmez, sadece bu sayfanın1
önüne düştüğünü de fark eder 181783497276652981
.
Bu iki sayı kadar işe yarayacak başka numaralar seçilebilir miydi? Neden ya da neden olmasın?
8682522807148012
2010'da yapılan revizyonlarda görülebileceği gibi, sınıfın önceki sürümünün mirasıdır . 181783497276652981L
Gerçekten de bir yazım hatası gibi görünüyor ve bir hata raporu olabilir.
seedUniquifier
64 çekirdekli bir kutuda aşırı derecede tartışılabilir. İş parçacığı yerel daha ölçeklenebilir olurdu.