JavaScript用Math.random()生成隨機數

2020-12-13 青石野草

1. 基本概念

顧名思義,Math.random()方法就是用於生成隨機數的,因為單詞random的意思正是「隨機的」。該方法生成的結果是 [0, 1) 範圍內的浮點數,注意這是一個左閉右開的區間,即該區間包含0而不包含1。

官方文檔指出Math.random()方法生成的隨機數在該區間上要大致符合均勻分布。Math.random()的語法結構如下所示,可以看出它是沒有參數的。

Math.random();

JavaScript引擎會自動設置隨機數種子(seed),而沒有提供任何途徑讓我們自己來完成這件事,但某些其它語言(比如C++,Java)則通常允許用戶自主設置隨機數種子。

2. 範圍放縮

Math.random()方法的一個不足之處就是它只能隨機生成 [0, 1) 範圍內的數,而我們常常又需要其它範圍內的隨機數。其實這也不難,只要對Math.random()的結果進行適當的放縮就可以達到這一目的。為了敘述方便,在後面的說明中我們都約定n和m代表正整數且m大於n。

首先,假設我們需要隨機生成 [0, n) 之間的所有數,那麼只需將Math.random()的結果乘以n就可以了,正如下面的代碼所做的那樣。

其次,我們可能需要的是隨機生成 [0, n] 範圍內的整數,注意此時n也包含在生成結果中。我們先將Math.random()的結果乘以 n+1,得到 [0, n+1) 範圍內的浮點數。然後,再對該範圍內的數進行向下取整(使用Math.floor()方法)就可以得到 [0, n] 範圍內的整數了。

以上兩種方法生成的隨機數都是從0開始的,如果我們需要的是任意區間的隨機數呢?假設我們需要隨機生成 [n, m] 範圍內的整數,那麼我們先隨機生成 [0, m - n] 範圍內的整數,再將它加上n就可以得到 [n, m] 內的整數了。

用相同的思想,可以將Math.random()的結果放縮到任意區間,當然也包括負數的情況。

3. 示例

3.1 生成隨機數

我們首先來看下Math.random()的作用和隨機生成一個任意區間內的整數的情況,以下代碼的執行結果如圖1所示。

圖1 隨機數的生成

3.2 隨機數的分布

官方文檔中說Math.random()的結果要大致符合均勻分布,我們現在就通過一個實例來看一看。在該例子中,我們先隨機生成1億個 [1, 10] 範圍內的整數,再計算每個數出現的比例。

以上代碼的執行結果如圖2所示,正是因為Math.random()符合均勻分布而我們自定義的隨機數函數又是建立在Math.random()上的,所以我們的隨機數函數生成的隨機數也是均勻分布的。

圖2 隨機數的分布情況

(完)

相關焦點

  • Python 模塊學習:random 隨機數生成
    模塊用於生成隨機數。random.randomrandom.random()用於生成一個0到1的隨機符點數: 0 <= n < 1.0random.uniformrandom.uniform的函數原型為:random.uniform(a, b),用於生成一個指定範圍內的隨機符點數,兩個參數其中一個是上限,一個是下限。
  • python模塊和包,常用模塊math、random、random.sample(li,n)#不放回抽取n個隨機樣本
    #使用導入後的內容import random #導入random模塊random.randint(1,100) #使用模塊中的randint()生成1-100的隨機數2.from 模塊 import 名字1 [as 別名1],名字2[as 別名2],...
  • 隨機生成N個立方體,學習blender Python隨機數生成
    打開blender控制臺首先輸入import random print(random.randint(0,9))多次執行print(random.randint(0,9)),就能見到系統每次都生成0-9內的隨機整數使用了
  • Python random模塊詳解,指定分布類型的隨機樣本生成
    random模塊的隨機數生成函數有以下幾種:choicerandintrandom_integersrandomrandom_sample>choice和randint的區別,choice能指定待選的數組和指定概率分布,randint只能給定上下限參數a和b,在np.arange(a, b)中選取,因此choice可以完全替代randintrandom##生成[0,1)中的1個均勻隨機浮點數
  • 「每日一練」巧用python生成隨機數
    隨機數在我們的生產和生活中有很多的應用場景,比如說登錄驗證的隨機數字等等,那麼你知道在Python中怎麼生成隨機數嗎?往下看,就是這麼簡單!>隨機整數:random.randint(a,b),生成區間內的整數隨機小數:習慣用numpy庫,利用np.random.randn(5)生成5個隨機小數0-1隨機小數:random.random(),括號中不傳參第一行:import
  • 學會 Math 對象這 10 個方法,能讓你事半功倍!
    簡介JavaScript中的math 對讓我們能夠對執行一些數學操作
  • 第43P,隨機數,Python內置庫之random
    一、常用的random方法1、隨機小數隨機生成0到1之間的小數:random.random();隨機生成x到y之間的小數:random.uniform(x,y);2、>隨機整數開區間,隨機生成x到y之間的整數:random.randint(x,y);注意:開區間,是包含x和y的。
  • JavaScript - Math對象
    中其實是有很多數學計算的需求的,不過不必擔心系統給我們提供了大量的數學運算的方法供我們使用而這些方法全都存在於我們的Math對象中Math常用的屬性:Math.PI 相當於π 3.14159Math對象常用的函數:1.Math.round() 四捨五入舉個小例子:<script type = 「text/javascript
  • java生成隨機數的五種方法
    Math.random() 靜態方法產生的隨機數是 0 - 1 之間的一個 double,即 0 <= random <= 1。當第一次調用 Math.random() 方法時,自動創建了一個偽隨機數生成器,實際上用的是 new java.util.Random()。當接下來繼續調用 Math.random() 方法時,就會使用這個新的偽隨機數生成器。
  • 隨機數大家都會用,但是你知道生成隨機數的算法嗎?
    再不濟我們每周的抽獎都是用隨機數抽出來的,我們用隨機數的時候,往往都會加一個前綴,說它是偽隨機數,那麼這個偽隨機數的偽字該怎麼解釋,什麼又是真隨機數呢?真偽隨機數目前學界劃分真偽隨機數的方式非常簡單,一句話就能說明白,凡是用一定的算法使用程序生成的都是偽隨機數,通過物理現象產生的隨機數才是真隨機數。
  • Math.random() 二三事
    隨機數隨機數是統計學領域的一個重要概念,對於遊戲來說同樣意義非凡,用好隨機數,可以使你的遊戲更真實、更人性、富有魅力
  • 在Python中生成隨機數據(指南)
    隨機是如何隨機的?首先,有必要進行聲明的是,用Python生成的大多數隨機數據從科學角度來說並不是真正隨機的。相反,它是偽隨機的:它是由偽隨機數生成器(pseudorandom number generator,PRNG)生成的,其本質是任意一種能夠產生看似隨機但仍可重複生成的數據的算法。
  • 手把手教你用Javascript製作隨機星星效果圖
    二、項目準備軟體:Dreamweaver三、實現的目標每次刷新產生隨機的星星個數。顯示畫布上。=Math.floor(Math.random()*_canvas.height);         arc.r=Math.floor(Math.random()*31+10);         r=Math.ceil(Math.random()*256);
  • 關於 JavaScript 的數組隨機排序
    國外有人寫了一個Shuffle算法可視化的頁面,在上面可以更直觀地看到使用arr.sort(() => Math.random() - 0.5)的確是很不隨機的。而上面的() => Math.random() - 0.5(即(a, b) => Math.random() - 0.5)顯然不滿足這個條件。翻看v8引擎數組部分的源碼,注意到它出於對性能的考慮,對短數組使用的是插入排序,對長數組則使用了快速排序,至此,也就能理解為什麼() => Math.random() - 0.5並不能真正隨機打亂數組排序了。
  • 阿里面試官:先問我Math.random()是線程安全的嗎?再問我幾個常見隨機數類的區別?
    當第一次調用 Math.random() 方法時,自動創建了一個偽隨機數生成器,實際上用的是 newjava.util.Random()。當接下來繼續調用 Math.random() 方法時,就會使用這個新的偽隨機數生成器。
  • 簡要解析:Java中隨機數生成的代碼實現
    【IT168技術】Math庫裡的static(靜態)方法random():該方法的作用是產生0到1之間(包括0,但不包括1)的一個double值。double rand = Math.random();        通過Random類的對象  程序可生成許多不同類型的隨機數字,做法很簡單,只需調用方法nextInt()和nextFloat()即可(也可以調用nextLong()或者nextDouble())。
  • C++ 隨機數初探
    在 C++ 11 標準中,定義在頭文件 random 中的隨機數庫通過一組協作的類來解決這些問題,主要用到的是兩個類:其中,一個引擎類可以生成 unsigned 隨機數列,一個分布使用一個引擎類生成指定類型的,在給定範圍內的,服從指定概率分布的隨機數。1.
  • 七天學會javascript第一天javascript介紹
    javascript介紹javascript數據類型javascript運算符javascript對象javascriptjavascript :客戶端編程。javascript是由客戶端去解釋運行的。怎麼引入javascript 呢?
  • R包randomForest 隨機森林
    1 randomForest的安裝    基於R包randomForest的隨機森林分析 >install.packages("randomForest")>library("randomForest")
  • python隨機函數random分配應用,隨機分配8名老師到3個教室中
    python隨機函數python隨機函數在python中,想要生成隨機數,就需要使用到python隨機函數random。而在這個項目中,我們需要使用到生成數字1到3範圍內的隨機數,即通過導入random模塊後,根據random.randint(1,3)隨機生成一個1到3的整數。下面開始實操。