在 Java 中的随机函数是 Math.random()。该函数会等概率的随机返回一个[0,1) 的数。在数学中,等概率是不可能的,但是在计算机中,小数是有精度的,数学中是没有的。验证如下:
/**
* 验证 Math.random() 的等概率
*/
public class MathRandomDemo {
public static void main(String[] args) {
int count = 0;
int loopCount = 1000;
for (int i=0; i
输出结果:
0.275
0 出现了103 次
1 出现了107 次
2 出现了126 次
3 出现了117 次
4 出现了115 次
5 出现了106 次
6 出现了107 次
7 出现了108 次
8 出现了111 次
根据输出结果可以看到,[0,8] 出现的次数基本差不太多。由此可以得出,[0,x],x出现的概率就是 x,那此时想让 [0,x] ,x 出现的概率是 x^2,怎么处理?
/**
* Math.random 的取值为[0,1)
* x 属于 [0,1),如何将 x 在 [0,1) 出现的概率由 x 调整为 x^2
*/
public class MathPowerRandom {
public static void main(String[] args) {
int count = 0;
int loopCount = 10000;
double x = 0.17;
for (int i=0; i
输出结果
0.0044
0.004913000000000001
结果很相近。
那么用 Math.min()怎么处理呢?
首先确定得到 x 的概率是 x,那么没有得到 x 的概率就是 1-x,那么得不到 x^2 的概率就是 (1-x)^2, 那么 x^2 的概率就是 1 - (1-x)^2。所以:
public class MathPowerRandom {
public static void main(String[] args) {
int count = 0;
int loopCount = 10000;
double x = 0.17;
for (int i=0; i
输出结果
0.3198
0.31110000000000004
页面更新:2024-03-22
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号