日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

真的了解js生成随机数吗

發布時間:2024/4/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 真的了解js生成随机数吗 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由js生成一切隨機數的基礎都是Math.random(),這個方法比較特別,生成的隨機數落在的區間是[0,1),進行一次操作的話,js只能生成一個類似于[n,m)這樣,左閉右開的區間。所以當有一些特殊需求的時候,就勢必要進行一些其它的操作,下面對各種需求進行簡單的分析:


生成任意區間的整數

  • 全閉區間[n,m]

    這種的最常見,大家都知道的那一長串公式:Math.floor(Math.random()*(m-n+1))+n;?就是生成這個全閉區間的方法。說到這個公式很多人都知道,但真正想明白的人估計很少。先生成一個[0,m-n+1)這樣左閉右開的區間,然后用Math.floor()取到[0,m-n]之間內的任意整數(看明白這一步很關鍵),之后加上區間左端點變成[n,m]內的任意整數,達到目的。

    說到這個地方,有一點必須提一下,隨便搜一下js生成隨機數,有很多文章都會用Math.ceil()或Math.round()這兩個方法,比如生成全閉的[n,m]區間內的任意整數,Math.ceil(Math.random()*(m-n))+n;或者Math.round(Math.random()*(m-n))+n;我感覺隨機數,最重要的就是隨機兩個字,每個值取到的概率一定要相等,這一點對于一些特定的場合非常重要,比如抽獎(年會都有抽獎的吧)。Math.ceil()的毛病是n<<m≈x,x為除端點之外的數,區間足夠大的話n幾乎取不到,m和x的概率幾乎相等,因為m這個點取不到所以概率相對來說小了一點。Math.round()的毛病是n=m=x/2,原因和前面的差不多,不明白的可以自己畫個坐標軸,很明了。

  • 全開區間(x,y)

    其實只要記住上面的全閉區間,其它所有區間的開閉,都可以由其推到,過程如下:
    (x,y) ==[x+1,y-1];也就是說n=x+1; m=y-1;將其代入上面的公式就可以得到:Math.floor(Math.random()*(y-x-1))+x+1;

  • 左閉右開[x,y)

    同理,[x,y) == [x,y-1];代入得到:Math.floor(Math.random()*(y-x))+x;

  • 左開右閉(x,y]

    (x,y]==[x+1,y];代入得到:Math.floor(Math.random()*(y-x))+x+1;


  • 生成任意區間內的浮點數

    這種實際當中用到的比較少,但也挺有意思的。

    • [n,m)

      這種最簡單,因為和random的特點保持一致。Math.rondom()*(m-n)+n;

    • 因為random的這種特點,想要取到其它區間內的浮點數就比較困難了。需要借助一些判斷才能才能滿足要求。思想和上面去整數的一樣。代碼如下:

    ????????function?fullClose(n,m)?{??//[n,m]var?result?=?Math.random()*(m+1-n)+n;while(result>m)?{result?=?Math.random()*(m+1-n)+n;}return?result;}function?fullOpen(n,m)?{?//?(n,m)var?result?=?Math.random()*(m-n)+n;while(result?==?n)?{result?=?Math.random()*(m-n)+n;}return?result;}function?leftOpen(n,m)?{?//?(n,m]var?result?=?Math.random()*(m-n+1)+n-1;while(result<n)?{result?=?Math.random()*(m-n+1)+n-1;}return?result;}


    轉載于:https://blog.51cto.com/zhanglida66/1917829

    總結

    以上是生活随笔為你收集整理的真的了解js生成随机数吗的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。