java中用Math.random()产生的随机数包括0和1吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中用Math.random()产生的随机数包括0和1吗相关的知识,希望对你有一定的参考价值。

Math.random()是令系统随机选取大于等于 0.0 且小于 1.0 的伪随机 double 值
包括0.0,不包括1.0
参考技术A Java中采用的取数值机制一直是含头不含尾,具体表现为:包含0,不包含1. 参考技术B Math.random 方法用于取得 0 ~ 1 之间的一个随机数。语法如下:
Math.random()

Math.random 方法实例
<script language="javascript">

document.write( Math.random() );

</script>

运行该例子,输出:
0.44661912193848635

提示:由于该方法产生随机数,因此每次刷新页面重新执行后,输出的结果都不一样。

Java中利用Math.random()产生服从泊松分布的随机数

众所周知。Java的Math.random()产生的是服从均匀分布的随机数,可是其它分布的应用也相当广泛,比如泊松分布和高斯分布(正态分布)。而这些分布Java没有非常好的提供(高斯分布能够利用Random类),我们须要自己编写。

       首先是泊松分布,这是一个离散型的随机变量分布。比較好弄,此外比如考察一些到达事件的概率时,通常服从泊松分布,因此该分布相当有用。在開始编写之前,先感谢知乎一位大神的科普知识。如果有一个服从均匀分布的随机变量。u~U[0,1],F(x)为随机变量x的累计分布函数,那么F-1(u)的变量服从F分布。即F的逆函数是服从F的随机变量。代码例如以下:

<span style="white-space:pre">	</span>private static int getPossionVariable(double lamda) {
		int x = 0;
		double y = Math.random(), cdf = getPossionProbability(x, lamda);
		while (cdf < y) {
			x++;
			cdf += getPossionProbability(x, lamda);
		}
		return x;
	}

	private static double getPossionProbability(int k, double lamda) {
		double c = Math.exp(-lamda), sum = 1;
		for (int i = 1; i <= k; i++) {
			sum *= lamda / i;
		}
		return sum * c;
	}
计算过lamda分别为1,4,10的分布,产生1000个随机数。跟维基百科的概率密度分布曲线相似,该方法应该有效。

正态分布因为是连续变量的分布。所以求其随机变量比較困难,但能够利用中心极限定理产生,下次再说吧。


以上是关于java中用Math.random()产生的随机数包括0和1吗的主要内容,如果未能解决你的问题,请参考以下文章

java如何产生1-8的整数随机数?

java编码中怎样产生四位随机数

Java用Math.random()生成一个50-100间的整型随机数

用JAVA 产生一个0到1的随机数

Java产生随机数

关于Java里产生1-6随机数的方法