- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Random#nextLong()文档说明此方法不会返回所有可能的 long
值(value)观:
从这个随机数生成器的序列中返回下一个伪随机、均匀分布的 long 值。 nextLong
的总承包契约(Contract)是一个长值是伪随机生成并返回的。方法nextLong
由类 Random 实现,就像通过:
public long nextLong() {
return ((long) next(32) << 32) + next(32);
}
因为类 Random 使用只有 48 位的种子,
此算法不会返回所有可能的长值 .
8090327796378429294
是可生成的,但数字
8090327796378429295
不是,尽管它们的唯一区别是一个最低有效位,并且值本身是 63 位长。
nextLong()
是否可以返回一个值使用以下算法:
public class JavaRandom {
private static final long ADD = 0xBL;
private static final long MULT = 0x5DEECE66DL;
private static final long TWO16 = 1L << 16;
private static final long MASK_31 = (1L << 31) - 1;
private static final long MASK_32 = (1L << 32) - 1;
private static final long MASK_48 = (1L << 48) - 1;
public static boolean canBeGeneratedByJavaRandom(long randomValue) {
long i1 = (randomValue >> 32) & MASK_32;
long i2 = (randomValue & MASK_32);
if (i2 > MASK_31) {
i1 = i1 + 1;
}
long front = i1 << 16;
for (long i = 0; i < TWO16; i++) {
long seed = front | i;
long i22 = (((seed * MULT) + ADD) & MASK_48) >> 16;
if (i22 == i2) {
return true;
}
}
return false;
}
}
如何获取
nextLong()
可以生成的所有值不对每个可能的 64 位数字运行此检查?调用
nextLong()
在收集所有值之前感觉不合理,并且可能存在冲突。
最佳答案
鉴于 setSeed
函数完全使用传入值的低 48 位来设置种子,您可以简单地遍历所有 seed
来自 0
的值至(1L << 48) - 1
, setSeed
给他们每个人,然后调用nextLong()
每个种子一次。
更多信息:
nextInt()
中确定种子。值,因此没有两个不同的种子生成相同的 2 个连续 nextInt()
值(value)观。 nextInt()
来电next(32)
, 和 nextLong()
获得 2 个连续 next(32)
的值值(value)观。 nextLong()
值(value)观。
关于java - 如何获取 Random.nextLong 可返回的所有可能值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65910868/
Stackoverflow,你好。我无法理解这段代码的输出 public static void main (String[] args) { String context = "0100 5
java.util.Random 类有一个方法 nextLong(),它自己调用 next(32) 返回一个随机有符号整数。 public long nextLong() { // it's
Random#nextLong()文档说明此方法不会返回所有可能的 long值(value)观: 从这个随机数生成器的序列中返回下一个伪随机、均匀分布的 long 值。 nextLong的总承包契约(
编辑正如标题所述,我无法从任何人那里得到任何意见。它应该回显 InputTypeMismatch 的错误,或者如果您执行数字,那么它会显示 nullreference 错误。我正在寻找要输入的单词 -
我正在使用调用 new Random().nextLong() 来生成随机数的 OAuth 库,但是它在异步调用时生成相同的随机数。我已将其缩小到线程化 Random.nextLong() 以经常返回
这是我不明白的code: // Divide n by two until small enough for nextInt. On each // iteration (at most 31 of
我正在尝试运行一个简单的代码,它将通过 nextLong() 方法将用户的帐号作为 long 类型。现在,如果用户给出了account_number(long accNo) 作为 string_typ
Random 类的 nextLong() 方法的 Javadoc 指出 Because class Random uses a seed with only 48 bits, this algorit
我正在阅读 java.util.Random 类并注意到没有 nextDouble()、nextFloat() 和 nextLong() 可以接受一个绑定(bind)。 有很多方法可以完成它like
当我在java中运行以下代码时: import java.util.*; class Solution{ public static void main(String []argh)
我是一名优秀的程序员,十分优秀!