【问题标题】:How to scale pseudo random numbers to a specific range?如何将伪随机数缩放到特定范围?
【发布时间】:2016-05-31 17:35:47
【问题描述】:

我如何将随机数缩放为 1-10 又不失随机性?

我知道,只使用 % 10 不是一个好主意。

此外,我需要一个种子值,所以我可以测试 确定性数字,

但我不明白这颗种子应该有什么价值 以及它如何影响序列。

高低有区别吗?

提前致谢。

【问题讨论】:

  • PRNG 会产生一个非常长的序列,一遍又一遍地重复。种子决定了您在该序列中的起始位置。序列是如此之长,以至于不知道种子=不知道接下来会发生什么。
  • @zapl 所以如果序列这么长,我知道它什么时候会重复吗?
  • 过了一会儿:stackoverflow.com/a/10217354/995891 - 由于序列的开头看起来与一些随机相似的序列没有任何不同,你甚至无法轻易分辨出你正在看到从一开始就是同样的事情,除非您跟踪生成的每个数字左右。

标签: java random random-seed


【解决方案1】:
import java.util.Random;

Random random = new Random( yourSeed );
int randomInt = random.nextInt(10) + 1 ;

seed 除了为PRNG 提供一个起点外,别无其他目的。纯属任意,不会影响随机数的分布。

nextGaussian() 的不同之处在于它返回围绕钟形曲线分布的浮点数。

【讨论】:

  • 并且 random.nextInt(10) + 1 提供均匀分布吗?
  • 包装盒侧面是这么写的 ;-)
  • 对不起,堆栈溢出让我很懒,查找 java doc
【解决方案2】:

通常在尝试获取随机值时,您会使用如下内容:

public int getRandom( int min, int max )
{
    return (int) Math.round( Math.random() % (max - min) + min );
}

或者,正如我刚刚从 Stavr00 的回答中记得的那样,使用来自 java.util.Random 的内置函数之一

【讨论】:

猜你喜欢
  • 2012-11-21
  • 2011-10-28
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多