![]() |
Home | Libraries | People | FAQ | More |
可以在 這裡 找到本庫的原英文版文檔。
很多應用都需要隨機數。使用 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/random/linear_congruential.hppboost/random/additive_combine.hppboost/random/inversive_congruential.hppboost/random/shuffle_output.hppboost/random/mersenne_twister.hppboost/random/lagged_fibonacci.hppboost/random/uniform_smallint.hppboost/random/uniform_int.hppboost/random/uniform_01.hppboost/random/uniform_real.hppboost/random/triangle_distribution.hppboost/random/bernoulli_distribution.hppboost/random/cauchy_distribution.hppboost/random/exponential_distribution.hppboost/random/geometric_distribution.hppboost/random/normal_distribution.hppboost/random/lognormal_distribution.hppboost/random/uniform_on_sphere.hpp <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,並對文檔改進提出了若干建議。
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)