Java Random.nextGaussian介于0和1之间

Java Random.nextGaussian介于0和1之间,java,random,gaussian,Java,Random,Gaussian,我正在开发一个图像编辑器,我将要实现过滤器。我决定用一些模糊或噪音 不管怎么说,我决定要一个统一的过滤器,所以我读了一下Random.nextGaussian() 但是,由于我使用的是范围从0到255的RGB值。如何将此随机双精度值缩放到0和255之间 我相信nextGaussian()返回的随机值的范围是-1到1 所以,我想保留随机值之间的相对差异。“缩放”或“移动数字范围”,如果有意义的话 我知道这是可能的,但我想不出来。提前谢谢 基本上,我需要它是一个介于0和1之间的数字。在这种情况下,您

我正在开发一个图像编辑器,我将要实现过滤器。我决定用一些模糊或噪音

不管怎么说,我决定要一个统一的过滤器,所以我读了一下Random.nextGaussian()

但是,由于我使用的是范围从0到255的RGB值。如何将此随机双精度值缩放到0和255之间

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

所以,我想保留随机值之间的相对差异。“缩放”或“移动数字范围”,如果有意义的话

我知道这是可能的,但我想不出来。提前谢谢


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

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

高斯分布是一种分布,其范围覆盖双值的整个集合(从数学上讲,从负无穷正无穷),峰值约为零。因此,高斯分布不均匀

nextDouble()

因此,您可以使用以下代码在
0
255
之间随机抽取一个数字:

Random rand = new Random();
int value = (int) math.floor(256.0*rand.nextDouble());
但是,更快的算法是屏蔽随机整数(
random.nextInt
):

此算法在big oh分析中速度不快,但它节省了一个更昂贵的
nextDouble
方法调用以及浮点乘法和浮点到整数的转换。

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

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

转换为
int
已经相当于
Math.floor()
@Phylogenesis:True,但大多数编译器无论如何都会对此进行优化,代码的语义可读性更高(因为不知道值如何舍入的人仍然可以理解它)问这个问题的原因是否与混合高斯模糊和高斯分布有关?高斯分布的全部要点是包含“所有值”(如答案中所述,峰值约为0),Hi@MerveKaymak,不确定您是否看到另一个“公认”答案(6年前),该答案也指出了分布的一些重要方面。
Random random = new Random();
double positiveRandomValue = Math.abs(random.nextGaussian());