`
tmj_159
  • 浏览: 708853 次
  • 性别: 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.

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

 

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

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

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

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

 

 

 

分享到:
评论

相关推荐

    math.random用法

    Math.random() 函数可以产生出 0-1 之间的任意小数,例如 0.0105901374530933 或 0.872525005541986。该函数的返回值可以用于生成随机数、随机移动、随机颜色等。 2. 改变产生的数字 Math.random() 函数可以与其他...

    【Java】Math.random()

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

    javascript中Math.random()使用详解

    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....

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

    Math.pow()函数在JavaScript中用于计算一个数的幂。它的第一个参数是底数,第二个参数是指数,函数会返回底数的指数次幂。例如: - Math.pow(2, 10) 返回 1024,因为2的10次方等于1024 - Math.pow(1024, 0.1) 返回 ...

    猜数字Math.random 利用alert函数

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

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

    Java提供了两种主要的方法来生成随机数:`Math.random()` 和 `java.util.Random` 类。虽然两者都能生成随机数,但它们之间存在一些关键的区别。 首先,`Math.random()` 是一个静态方法,它直接位于 `Math` 类中,...

    javascript Math.random()随机数函数

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

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

    Lotus Domino AJAX URL调用代理Math.random()是一个前端开发中的技术点,主要涉及到Ajax、JavaScript、ECMAScript以及 Lotus Domino AJAX 框架的应用。在Web应用中,使用Ajax技术可以实现页面局部更新,提高用户体验...

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

    本文将详细解释`random.nextInt()`和`Math.random()`的基础用法。 首先,`random.nextInt(n)`是`Random`类的一个方法,用于生成0到n(不包括n)之间的整数。这个方法内部实现时,如果n是2的幂,它会执行更高效的...

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

    在JavaScript中,`Math.random()`函数是一个非常有用的工具,它能生成一个介于0(包含)和1(不包含)之间的随机浮点数。如果我们要生成一个在指定范围内的随机整数,例如从n到m(包括n和m),我们可以结合`Math....

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

    随机操作数可能指的是摇号的范围,即`Math.random()`生成的浮点数可以乘以一个用户定义的数值,从而改变摇号的可能结果范围。而摇号速率则涉及到动画效果,可能通过调整JavaScript的定时器(如`setTimeout`或`...

    Math.uuid.js

    《JavaScript中的UUID生成:深入理解Math.uuid.js》 在JavaScript编程中,UUID(Universally Unique Identifier)是一种广泛应用的全局唯一标识符,它主要用于创建对象的唯一ID,尤其是在分布式环境中。Math.uuid....

    创造节日奇迹:使用JavaScript `Math.random()` 为圣诞树装饰球添加随机位置

    通过使用JavaScript的Math.random()函数,我们可以为圣诞树装饰球添加随机位置,从而提升用户体验并增加节日气氛。这些动态效果包括随机位置的装饰球、飘落的雪花和闪烁的灯光。通过添加这些动画,我们可以创建一个...

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

    在JavaScript中,`Math.random()`方法是一个非常实用的内置函数,它被用来生成一个介于0(包含)和1(不包含)之间的随机浮点数。这个浮点数的每一位都是独立且均匀分布的,因此它非常适合在各种场景下创建随机效果...

    java.util.Random与Math.random区别

    2. 生成随机数的方式:Math.random()方法每次调用都生成一个新的伪随机数,而java.util.Random类可以生成一个伪随机数流。 3. 多线程支持:Math.random()方法是完全同步的,可以多个线程使用,而java.util.Random类...

    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 * ...

Global site tag (gtag.js) - Google Analytics