Random(Java 7)中的181783497276652981和8682522807148012是什么?
为什么被选中?181783497276652981
8682522807148012
Random.java
以下是 Java SE 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);
因此,在没有任何种子参数的情况下调用时,将当前的“种子单基化器”与 XOR 进行 XOR。然后,它用于创建另一个种子单一查询器,以供下次调用时存储。new Random()
System.nanoTime()
181783497276652981
new Random()
文本和不放在常量中,但它们不会出现在其他任何地方。181783497276652981L
8682522807148012L
起初,评论给了我一个简单的线索。在线搜索该文章会产生实际的文章。 没有出现在论文中,但确实出现了 - 作为另一个数字的子字符串,它前面有一个。8682522807148012
181783497276652981
1181783497276652981
181783497276652981
1
该论文声称,这个数字为线性同余发生器提供了良好的“优点”。这个数字只是被错误地复制到Java中了吗?是否具有可接受的优点?1181783497276652981
181783497276652981
为什么被选中?8682522807148012
在线搜索任一数字都不会产生任何解释,只有此页面也注意到在 前面掉落了。1
181783497276652981
是否可以选择其他数字与这两个数字一样有效?为什么或为什么不呢?