【问题标题】:Generating a random number between 0 and x (Java)生成 0 到 x 之间的随机数 (Java)
【发布时间】:2012-04-18 13:24:44
【问题描述】:

使用 Xorshift 随机数生成器...我已经有了生成器,但我无法修改它以提供介于 0 和上限之间的数字(如 Java Random 类中的 nextInt() 方法)。

  long seed = System.nanoTime();

  int next(int nbits) {
    long x = seed;
    x ^= (x << 21);
    x ^= (x >>> 35);
    x ^= (x << 4);
    seed = x;
    x &= ((1L << nbits) -1);
    return (int) x;
  }

有什么想法吗?

【问题讨论】:

  • 你能用((int)x) % (upper_limit + 1)吗? (这是一个真诚的问题;我对 Xorshift 的属性知之甚少——具体来说,它在低位有多少熵——不知道这是否是个好主意。)
  • 使用余数函数 - n % x
  • 我想过这个,但我感觉它会影响加密强度。难道没有理由对它有任何影响吗?

标签: java random cryptography


【解决方案1】:

你可以看到java对random class做了什么

【讨论】:

  • OP 知道这个类,因为他们在问题中提到了它。
  • 我知道,但我相信 OP 从未阅读过该类的源代码,否则他将能够解决问题。所以我链接了来源。
  • @PaulBellora:但是(s)他可能不知道该类有一个开源实现。 (请注意,此答案直接链接到源代码。)
  • @ruakh 正确,并且在该源文件中也有明确的 cmets 和关于该任务的解释。
猜你喜欢
  • 2016-01-01
  • 2014-04-11
  • 2011-08-10
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 2011-07-07
  • 1970-01-01
相关资源
最近更新 更多