Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java.nextFloat()的随机性是什么_Java_Random_Probability - Fatal编程技术网

Java.nextFloat()的随机性是什么

Java.nextFloat()的随机性是什么,java,random,probability,Java,Random,Probability,具体而言,如果以以下形式使用: Random.nextFloat()*N; 我能期望值从0到N的高度随机分布吗? 这样做会更好吗 Random.nextInt(N)*Random.nextFloat(); Random#nextFloat()将为您提供一个0到1之间的均匀分布数字 如果你取一个均匀分布,然后乘以N,你就可以均匀地放大分布。所以你得到一个均匀分布在0和N之间的随机数 如果你用一个0到N之间的随机数乘以它,你会得到一个不均匀的分布。如果乘以N得到的是0和N之间的均匀分布,那么乘

具体而言,如果以以下形式使用:


Random.nextFloat()*N;

我能期望值从0到N的高度随机分布吗? 这样做会更好吗


Random.nextInt(N)*Random.nextFloat();

Random#nextFloat()将为您提供一个0到1之间的均匀分布数字

如果你取一个均匀分布,然后乘以N,你就可以均匀地放大分布。所以你得到一个均匀分布在0和N之间的随机数


如果你用一个0到N之间的随机数乘以它,你会得到一个不均匀的分布。如果乘以N得到的是0和N之间的均匀分布,那么乘以0和N之间的数字,得到的结果必须小于或等于乘以N的结果。因此,平均值较小。

首先,Java中的Random不包含rand()方法。看见我认为您考虑了Random.next()方法

由于您的问题,文档说明nextFloat()的实现方式如下:

public float nextFloat() {
   return next(24) / ((float)(1 << 24));
 }
public float nextFloat(){

返回下一个(24)/((float)(1一个好生成器的单个随机数,
java.util.random
是一个好的随机数,将在整个范围内均匀分布……它的平均值和中值为0.5*N。1/4的数字将小于0.25*N,1/4的数字将大于0.75*N等

如果你再将它乘以另一个随机数生成器(其平均值为0.5),你将得到一个平均值为0.25*N,中值为0.187*N的随机数…因此,一半的数字小于0.187*N!1/4的数字将小于0.0677*N!而只有1/4的数字将超过0.382*N。(通过观察另外两个随机数的乘积生成的1000000个随机数,并对其进行分析,实验得出的数字。)


这可能不是您想要的。

第一个将给出一个均匀分布的范围,第二个将偏向于零。第二个解决方案将意味着一个不均匀分布,有更多的值接近0;p.s。这是java.util.Random吗?因为我不相信它有那些静态方法eah,我假设为Random.rand(N)他指的是一个介于0和Ntrue之间的随机整数,但random.rand(N)也不作为方法存在,只作为.nextInt()存在谢谢,我主要是想解决分配的规模,以及这是否是一个问题。我不打算把我的想法写得很好。如果你愿意,你可以看到比例。在一页上画点,间隔1英寸。然后在下面,对于每个点,将它从开始的距离加倍(甚至从原始点到新点画一条线).你会看到所有的点仍然均匀地分布在更大的范围内