C++ 11 新特性之隨機數庫

usher2007發表於2016-09-13

前 9 篇在這裡:

這是C++11新特性介紹的第十部分,涉及到隨機數庫相關的新特性。

不想看toy code的讀者可以直接拉到文章最後看這部分的總結。

簡介

之前,C++中的隨機數生成都依賴於一個簡單的rand函式。這個函式產生一定範圍內的一個均勻隨機整數。如果需要其他隨機分佈或者其他範圍的隨機數,就需要根據rand函式產生的隨機數進行再加工,不過這時,就容易引入非隨機性了。

C++11新標準中引入了一個新的隨機數庫,相關功能定義在random標頭檔案中,通過多個互相協作的類,可以生成任意範圍內、服從多種隨機分佈的隨機數。

隨機引擎

新的隨機數庫中引入了隨機引擎的概念。一個隨機引擎將產生一組原始的隨機數列,一般這些原始的隨機數不能直接使用,要配合隨機分佈類產生符合某分佈的隨機數後才能進行使用。

一般,最常用的隨機引擎是default_random_engine。

隨機分佈

可以用uniform_int_distribution和隨機引擎配合來產生均勻分佈的隨機整數。

類似的,uniform_real_distribution則可以產生一個均勻分佈的實數。

換一個分佈,試試正態分佈:

伯努利分佈也是經常會使用到的:

輸出

整個測試程式的輸出結果如下:

總結

  1. C++11新標準中引入了比rand更強大的隨機數庫。
  2. 隨機數引擎和隨機分佈類配合,共同產生符合某一分佈、在某一範圍內的隨機數。

完整程式碼詳見random.cpp

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

C++ 11 新特性之隨機數庫 C++ 11 新特性之隨機數庫

相關文章