`
tmj_159
  • 浏览: 701047 次
  • 性别: Icon_minigender_1
  • 来自: 永州
社区版块
存档分类
最新评论

Math.random 怎么产生随即数的

 
阅读更多

        对JAVA程序员来说,我们都知道java.lang.Math类中有一个random的静态方法来生成随机数。这个方法生成一个double的随即数,这个数的范围在(0.0,1.0)之间,通过乘上某个数来完成0至某个数之间的随机数。

 

        可是对于随即数如何产生的,到底这个数是不是真的随即你知道多少呢?

一、随机数的产生

       我们拿源码说话

 

public static double random() {
        if (randomNumberGenerator == null) initRNG();
        return randomNumberGenerator.nextDouble();
    }

 这里需要一个随即数的生成器

 

private static synchronized void initRNG() {
        if (randomNumberGenerator == null) 
            randomNumberGenerator = new Random();
    }

 其实随机数生成器只是一个叫Random()类

 

private final AtomicLong seed;
private final static long multiplier = 0x5DEECE66DL;
private final static long mask = (1L << 48) - 1;
private static volatile long seedUniquifier = 8682522807148012L;

public Random() { this(++seedUniquifier + System.nanoTime()); }

public Random(long seed) {
        this.seed = new AtomicLong(0L);
        setSeed(seed);
    }

 synchronized public void setSeed(long seed) {
        seed = (seed ^ multiplier) & mask;
        this.seed.set(seed);
    	haveNextNextGaussian = false;
    }

 这就是几乎所有相关源码了

 

经过这一些计算之后就能得到所谓的随即数了。二、为什么随机数随即至于为什么计算之后就是随即数了,我也一直抱有怀疑的看法。我看源码注释上看到了如下说明

An instance of this class is used to generate a stream of
 pseudorandom numbers.

 意思说这个是生成一个伪随机数的类。

 

三、随机数和伪随机数?   维基百科上如下说明

产生随机数有多种不同的方法。这些方法被称为随机数发生器。随机数最重要的特性是它在产生时后面
的那个数与前面的那个数毫无关系。

真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等。
这样的随机数发生器叫做物理性随机数发生器,它们的缺点是技术要求比较高。

在实际应用中往往使用伪随机数就足够了。这些数列是“似乎”随机的数,实际上它们是通过一个
固定的、可以重复的计算方法产生的。它们不真正地随机,因为它们实际上是可以计算出来的,
但是它们具有类似于随机数的统计特征。这样的发生器叫做伪随机数发生器。

 

 

 

分享到:
评论

相关推荐

    【Java】Math.random()

    Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。 for (int i = 0; i &lt; 5; i++) { ...

    math.random用法

    math.random函数的一些用法技巧

    java 随机数 Math.random

    //产生随机数的类 final SuiJiShuClass sjs=new SuiJiShuClass(); final JPanel panel=new JPanel(); //初始化一个JPanel ...int m=(int)Math.rint(Math.random()*(parseInt2-parseInt3)+ parseInt3);

    使用Math.floor与Math.random取随机整数的方法详解

    Math.random():获取0~1随机数 Math.floor() method rounds a number DOWNWARDS to the nearest integer, and returns the result. (小于等于 x,且与 x 最接近的整数。)其实返回值就是该数的整数位:Math.floor(0....

    猜数字Math.random 利用alert函数

    猜数字Math.random 利用alert函数 猜数字Math.random 利用alert函数 猜数字Math.random 利用alert函数 猜数字Math.random 利用alert函数

    javascript Math.random()随机数函数

    random函数参数 无参数 random函数返回值 返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1) random函数示例 [removed](Math.random()); 返回随机数 [removed](Math.random()*(20-10)+10); 返回10-20的随机数 ...

    浅谈java中Math.random()与java.util.random()的区别

    下面小编就为大家带来一篇浅谈java中Math.random()与java.util.random()的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Javascript四舍五入Math.round()与Math.pow()使用介绍

    本文为大家介绍下Javascript中的四舍五入Math.round()与Math.pow()的使用,感兴趣的朋友不要错过

    使用js Math.random()函数生成n到m间的随机数字

    Math.random()函数返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1) 生成n-m,包含n但不包含m的整数: 第一步算出 m-n的值,假设等于w 第二步Math.random()*w 第三步Math.random()*w+n 第四步parseInt(Math....

    javascript中Math.random()使用详解

    Math.random()方法返回大于等于 0 小于 1 的一个随机数。对于某些站点来说,这个方法非常实用,因为可以利用它来随机显示一些名人名言和新闻事件。 1. 在连续整数中取得一个随机数 值 = Math.floor(Math.random() *...

    纯JS摇号器,使用JS Math.random()获取随机值

    纯JS摇号器,使用JS Math.random()获取随机值,Math.ceil()取值,可设置随机操作数,摇号速率。实用,简单,方便。

    实例讲解Java中random.nextInt()与Math.random()的基础用法

    今天小编就为大家分享一篇关于实例讲解Java中random.nextInt()与Math.random()的基础用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    lotus domino AJAX URL调用代理Math.random()

    lotus domino AJAX URL调用代理Math.random()

    JavaScript使用Math.random()生成简单的验证码

    今天小编就为大家分享一篇关于JavaScript使用Math.random()生成简单的验证码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    Math.uuid.js

    Math.uuid.js js 生成 uuid

    JavaScript中用于生成随机数的Math.random()方法

    Math.random() ; 下面是参数的详细信息: NA 返回值: 返回0(含)和1(不包括)之间的随机数 例子: &lt;html&gt; &lt;head&gt; &lt;title&gt;JavaScript Math random() Method&lt;/title&gt; &lt;/head&gt; &lt;...

    math.min.js

    * math.js * https://github.com/josdejong/mathjs * * Math.js is an extensive math library for JavaScript and Node.js, * It features real and complex numbers, units, matrices, a large set of * ...

    java随机数

    通过阅读Math.random()的源码,或者干脆利用IDE的自动完成功能,开发人员可以很容易发现,java.lang.Math.random()使用一个内部的随机生成对象 - 一个很强大的对象可以灵活的随机产生:布尔值、所有数字类型,甚至是...

Global site tag (gtag.js) - Google Analytics