Java 基于种子值的随机类种子及其nextInt效应

Java 基于种子值的随机类种子及其nextInt效应,java,random,Java,Random,因此,我已经切碎了代码,以努力清理这一点。我的困惑是B1和B2。B2是否刚刚达到长值的上限,这就是为什么nextInt总是返回“1”?任务是解释每个标题(B1、B2…)所显示的行为 如果未达到Long的最大值,则表明您的CONSTA(和CONSTB)的种子质量非常差 输出 441287210 11010010011011000001000101010 如果未达到Long的最大值,则表明您的CONSTA(和CONSTB)的种子质量非常差 输出 441287210 1101001001101100

因此,我已经切碎了代码,以努力清理这一点。我的困惑是B1和B2。B2是否刚刚达到长值的上限,这就是为什么nextInt总是返回“1”?任务是解释每个标题(B1、B2…)所显示的行为


如果未达到
Long
的最大值,则表明您的
CONSTA
(和
CONSTB
)的种子质量非常差

输出

441287210 11010010011011000001000101010

如果未达到
Long
的最大值,则表明您的
CONSTA
(和
CONSTB
)的种子质量非常差

输出

441287210 11010010011011000001000101010

Java的
Random
实现的周期长度为248。当你观察从0到9的一长串真正随机的值时,你会看到相同数量的重复运行,向上运行,向下运行,以及几乎你能想象到的任何其他“意外”行为。所有这些“意外”行为实际上都是在真正的随机性中发生的,因此它们也应该在伪随机数生成器算法中被观察到。如果不是,PRNG将是可证明的非随机的,因为这样的事情发生时具有真正的随机性


然而,PRNG给出了长度248的确定序列。选择种子时,您正在选择序列中要开始跟踪它的点。您(或者您的教授?)碰巧发现了两个种子值,这些种子值开始跟踪两个“意外”行为。

Java的
Random
实现的周期长度为248。当你观察从0到9的一长串真正随机的值时,你会看到相同数量的重复运行,向上运行,向下运行,以及几乎你能想象到的任何其他“意外”行为。所有这些“意外”行为实际上都是在真正的随机性中发生的,因此它们也应该在伪随机数生成器算法中被观察到。如果不是,PRNG将是可证明的非随机的,因为这样的事情发生时具有真正的随机性


然而,PRNG给出了长度248的确定序列。选择种子时,您正在选择序列中要开始跟踪它的点。你(或者你的教授?)碰巧发现了一些种子价值观,这些价值观从一些“意外”行为开始跟踪。

好吧,我同意这些都是坏种子,但我认为这可能是他试图展示的重点。然而,当比较CONSTA和10时,它将生成的唯一值是1。至于康斯特布,我更不了解@YeeP
CONSTA
(和
CONSTB
)生成不同的值。尝试循环到
100
。这只是你的初始范围,很容易预测(假设你不知道种子)。@是的,他们不是坏种子,没有这样的事情。请看我对种子作用的解释。种子可以产生罕见的结果,但如果种子值本身是随机选择的,那么这种情况应该很少发生(嗯!)。好吧,我同意它们都是坏种子,但我认为这可能是他试图展示的要点。然而,当比较CONSTA和10时,它将生成的唯一值是1。至于康斯特布,我更不了解@YeeP
CONSTA
(和
CONSTB
)生成不同的值。尝试循环到
100
。这只是你的初始范围,很容易预测(假设你不知道种子)。@是的,他们不是坏种子,没有这样的事情。请看我对种子作用的解释。种子可以产生罕见的结果,但如果种子值本身是随机选择的,这种情况应该很少发生(啊哼!)。回答得好。让我们给它加一些数字。连续获得10个特定数字的概率是多少?1英寸
1000000000
。2生成的组合数是多少⁴⁸? <代码>281474976710656。从统计学上讲,在随机种子循环回到自身之前,10位数的序列会发生多少次?28147次。“这只是找到它们的问题。”安德烈亚斯关于我唯一要补充到你的评论中的一点是,28147是这样的预期发生次数。实际数字应该在这个大概范围内,但不一定(甚至可能)是那个特定的值。如果不是,您刚刚发明了一个新的PRNG测试,它捕捉到Java的
随机
错误行为。是的,这就是为什么我在语句前面加上“统计”。-)让我的计算机连夜运行,使用
nextInt(10)
搜索长序列的
1
值。发现种子
22317321631415L
作为13个连续
1
值序列的开始。看!这是有趣的东西!我很好奇是什么种子产生了10个相同数字中最长的序列,以及长度是多少。当我有更多的空闲时间时,我得试一试。回答得好。让我们给它加一些数字。连续获得10个特定数字的概率是多少?1英寸
1000000000
。2生成的组合数是多少⁴⁸? <代码>281474976710656
。从统计学上讲,在随机种子循环回到自身之前,10位数的序列会发生多少次?28147次。“这只是找到它们的问题。”安德烈亚斯关于我唯一要补充到你的评论中的一点是,28147是这样的预期发生次数。实际数字应该在这个大概范围内,但不一定(甚至可能)是那个特定的值。如果不是,您刚刚发明了一个新的PRNG测试,它捕捉到Java的
随机
错误行为。是的,这就是为什么我在语句前面加上“统计”。-)让我的计算机连夜运行,使用
nextInt(10)
搜索长序列的
1
值。发现种子
22317321631415L
as
final long CONST1 = 340277109L;
final long CONST2 = 101010101L;
final long CONSTA = CONST1 + CONST2;
System.out.println(CONSTA + " " + Long.toBinaryString(CONSTA));
441287210 11010010011011000001000101010