Java Random.nextGaussian介于0和1之间

时间:2014-12-22 14:04:35

标签: java random gaussian

我正在使用图像编辑器,我即将实施过滤器。我决定采取某种模糊或噪音。

无论如何,我决定要一个统一的过滤器,所以我读了Random.nextGaussian()

但是,由于我使用的RGB值范围为0到255.如何缩放此随机双精度值以适应0和255?

nextGaussian()返回的随机值范围从-1到1我相信。

所以,我想保留随机值之间的相对差异。 "刻度"或者"移动数字范围"如果这是有道理的。

我知道这是可能的,但我无法弄清楚。提前谢谢。

基本上,我需要它是介于0和1之间的数字。

2 个答案:

答案 0 :(得分:2)

在这种情况下,您应该使用nextDouble()

高斯分布是一个分布,范围超过整个双值集合(从数学上讲,从减去无穷大正无穷大),峰值在零附近。因此高斯分布不均匀

nextDouble()方法在01之间抽取数字统一(包括0,排除1

您可以使用以下代码在0255(包括两者)之间随机抽取数字:

Random rand = new Random();
int value = (int) math.floor(256.0*rand.nextDouble());

然而,更快的算法会屏蔽随机整数(Random.nextInt):

Random rand = new Random();
int value = rand.nextInt()&0xff;

这种算法在big-oh分析中并不快,但它节省了一个更昂贵的nextDouble方法调用以及浮点乘法和浮点到int转换。

答案 1 :(得分:0)

您可以将 nextGaussian() 与 Math.abs() 一起使用,以便您可以获得高斯分布的正值。

Random random = new Random();
double positiveRandomValue = Math.abs(random.nextGaussian());