<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 隨機數的產生 隨機數有著廣泛的用途。比如測試、游戲、仿真以及安全等領域都需要用到隨機數。標準庫所提供的多種可供選擇的隨機數產生器也恰恰反應了隨機數應用范 圍的多樣性。隨機數產生器由引擎(engine)和分布(distribution)兩部分組成。其中,engine用于產生一個隨機數序列或者偽隨機數 序列;distribution則將這些數值映射到位于固定范圍的某一數學分布中。關于分布的例子有:unifrom_int (所有的整數倍都被以相等的概率產生)以及normal_distribution (分布的概率密度函數曲線呈鐘形);每一種分布都處于某一特定的范圍之內。例如: ``` //distribution將產生的隨機數映射到整數1..6 uniform_int_distribution<int> one_to_six {1,6}; default_random_engine re {}; //默認的engine ``` 如果想獲得一個隨機數,你可以用一個隨機引擎為參數調用distribution來產生一個隨機數: ``` int x = one_to_six(re); // x 是 [1:6]這個范圍內的一個隨機數 ``` 在每次調用的時候都需要提供一個引擎作為參數非常繁瑣,所以我們可將引擎和 distribution邦定成一個函數對象,然后直接通過這個函數對象的調用來產生隨機數,而不用每次調用都提供參數了。 ``` auto dice {bind(one_to_six,re)}; // 產生一個新的隨機數生成器 int x = dice(); // 調用dice函數對象,x是一個分布在 [1:6]范圍的隨機數 ``` 多虧在設計它是對一般性和性能的關注。在這方面,一位專家曾在評價標準庫中隨機數模塊時說道:“在擴充的過程中,每一個隨機數庫想變成什么”。然而,它很 難真正讓一個新手感覺到容易上手。在性能方面,我從沒有見過隨機數的接口成為性能的瓶頸。另外,我也一直會使用一個簡單的隨機數生器來教新手(具有一定的 基礎)。下面的就是這樣的一個可以說明問題的例子。 ``` int rand_int(int low, high); //按照均勻分布在區間[low: high]中產生一個隨機數 ``` 然而我們如何實現rand_int()?我們必須在rand_int()中使用dice()之類的函數: ``` int rand_int(int low, int high) { static default_random_engine re {}; using Dist = uniform_int_distribution<int>; static Dist uid {}; return uid(re, Dist::param_type{low,high}); } ``` 關于rand_int()的定義依然是屬于“專家級”的,但是應該把關于它的使用安排在C++課程的第一周。 在這里,我們舉一個不太瑣碎的關于隨機數生成器的例子。這個例子中代碼的功能是生成和打印一個正態分布。 ``` default_random_engine re; //默認引擎 normal_distribution<double> nd(31 /* mean */, 8 /* sigma */); auto norm = std::bind(nd, re); vector<int> mn(64); int main() { for (int i = 0; i<1200; ++i) ++mn[round(norm())]; // 產生隨機數 for (int i = 0; i<mn.size(); ++i) { cout << i << '\t'; for (int j=0; j<mn[i]; ++j) cout << '*'; cout << '\n'; } } ``` 我運行了一個支持boost::random的版本并把它編輯到C++0x中,然后得到了下面的結果。 ``` 0 1 2 3 4 * 5 6 7 8 9 * 10 *** 11 *** 12 *** 13 ***** 14 ******* 15 **** 16 ********** 17 *********** 18 **************** 19 ******************* 20 ******************* 21 ************************** 22 ********************************** 23 ********************************************** 24 ******************************************** 25 ***************************************** 26 ********************************************* 27 ********************************************************* 28 *************************************************** 29 ****************************************************************** 30 ********************************************** 31 ********************************************************************* 32 ********************************************** 33 ************************************************************* 34 ************************************************************** 35 *************************************** 36 *********************************************** 37 ********************************************** 38 ********************************************* 39 ******************************** 40 ******************************************** 41 *********************** 42 ************************** 43 ****************************** 44 ***************** 45 ************* 46 ********* 47 ******** 48 ***** 49 ***** 50 **** 51 *** 52 *** 53 ** 54 * 55 * 56 57 * 58 59 60 61 62 63 ``` 另外,可以參考以下文獻: * Standard 26.5: Random number generation
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看