我想知道Java中Math.random()背后的PRNG *的默认种子是什么.根据我的理解,C中的那个基于系统时钟.它在Java中是否相似?此外,每次调用Math.random()时种子都会更改吗?
* PRNG =伪随机数发生器
解决方法:
When this method is first called, it creates a single new
pseudorandom-number generator, exactly as if by the expression
new java.util.Random()
This new pseudorandom-number generator is used
thereafter for all calls to this method and is used nowhere else.
跟着java.util.Random(),文档说
public Random()
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.
当前的实现似乎基于System.nanoTime(),但可能会更改并仍然符合文档的合同.
至于每次通话都要改变种子,那不是种子的运作方式. PRNG被播种一次,然后产生一系列从初始状态演变而来的值.你不应该,Java也不应该继续重播.
标签:java,random,prng
来源: https://codeday.me/bug/20190612/1227158.html