boost.png (6897 bytes) Home Libraries People FAQ More

Boost 隨機數庫

可以在 這裡 找到本庫的原英文版文檔。

很多應用都需要隨機數。使用 Boost 隨機數庫 (Boost.Random) 的生成器和分佈可以產生多種具有有用性質的隨機數 (例如正態分佈)。

請先閱讀 概念文檔,熟悉一下基本概念。如果你想要盡快開始,不妨看看 random_demo.cpp

下面提供一個例子:

  boost::mt19937 rng;                 // produces randomness out of thin air
                                      // see pseudo-random number generators
  boost::uniform_int<> six(1,6)       // distribution that maps to 1..6
                                      // see random number distributions
  boost::variate_generator<boost::mt19937&, boost::uniform_int<> >
           die(rng, six);             // glues randomness with mapping
  int x = die();                      // simulate rolling a die
  

庫的組織

本庫被分成了數個頭文件,全部存放在 boost/random/。此外,boost/random.hpp 包含了 boost/random/ 中的所有頭文件。

本庫提供了一個前端類模板,variate_generate;請閱讀其 文檔

以下頭文件中提供了數個隨機數生成器,請閱讀其 文檔 類似地,以下頭文件中提供了數個隨機分佈;請閱讀其 文檔 此外,頭文件 <boost/nondet_random.hpp> 中提供了不確定的隨機數生成器;請閱讀其 文檔

為把生成器界面和分佈函數映射到其它概念上,提供了數個 修飾符

測試

random_test.cpp 中包含了一個針對偽隨機數生成器和分佈的全面測試套件。

使用 random_speed.cpp 得到了 性能分析結果

理論注記

用於產生確定的和不確定的隨機數的方法有根本的不同。由於計算機確定的本性,實現不確定的隨機數生成設施往往很困難。因此,隨機數庫被分成了兩部分,以反映兩個不同的應用領域。

歷史和致謝

1999 年 11 月,Jeet Sukumaran 提出了一個基於虛函數的框架,不久做出了一個基於模板的原型。Ed Brey 指出 Microsoft Visual C++ 不支持類內成員初始化,並建議採用 enum 來繞過這個問題。Dave Abrahams 指出了量子化 (quantization) 問題。

2000 年 3 月,經過 boost 郵件列表的多方面討論,決定首次釋出本隨機數庫。感謝 Beman Dawes 提供最初的 min_rand 類、可移植性修正、文檔建議和一般的指導。Harry Erwin 提供的頭文件揭示出了更多的需求。Ed Brey 和 Beman Dawes 提出需要一個類迭代器的界面。

Beman Dawes 組織了正式審核。其間 Matthias Troyer, Csaba Szepesvari 和 Thomas Holenstein 提供了詳盡的評論。審核通過的版本在 2000 年 6 月 17 日正式成為了 boost 的一部分。

Gary Powell 貢獻了關於代碼清潔性的建議。Dave Abrahams 和 Howard Hinnant 建議把基本的生成器模板從名字空間 boost::detail 移至 boost::random

Ed Brey 要求移除了多餘的警告並幫助解決了 uint64_t 處理問題。Andreas Scherer 在 MSVC 上測試了本庫。 Matthias Troyer 貢獻了一個 lagged-Fibonacci 算法的生成器。Michael Stevens 發現了 normal_distribution 複製語義中的 bug,並對文檔改進提出了若干建議。


Valid HTML 4.01 Transitional

Revised 05 December, 2006

Copyright © 2000-2005 Jens Maurer

Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

中文版修訂:2009/1/21

Copyright © 2008 xiaq

在 Boost Software License, Version 1.0 的條款下發佈。(參看文件 LICENSE_1_0.txt 或在線副本 http://www.boost.org/LICENSE_1_0.txt)