我想實現下面的類:什麼是C++ 11隨機分佈?
typedef std::mt19937 Engine;
class Interval
{
public:
double upperBoundary;
double lowerBoundary;
double generateUniformRandomNumber(Engine& engine);
};
我希望類的多線程環境中工作。每個線程都有自己的Engine
對象實例,它會將Engine
傳遞給具有隨機行爲的任何類的對象。
爲了均勻地產生隨機數的C++ 11的方式,在generateUniformRandomNumber
的實施必須是這樣的:
uniform_real_distribution<double> distribution_; // private member of Interval
double Interval::generateUniformRandomNumber(Engine& engine)
{
return distribution_(engine);
}
的問題是,我不知道C++ 11分佈。我知道C++ 11隨機數引擎可以是非常大的對象(幾千字節),但分佈情況如何?起初我以爲分佈只是簡單的函數,其中operator()
是pure const
函數,但它似乎既不是pure
也不是const
。根據reference,每個分發實例都有一個reset()
成員函數。這意味着它有一個很大的內部狀態或者一個緩存。
我的問題是:
難道分佈有一個內部狀態?如果是,爲什麼?標準是否會說明這個州的規模?
像我一樣做一個實現是一個好主意嗎?有沒有更好的辦法?
作爲一個例子,我實現了一個[beta版本](https://gist.github.com/sftrabbit/5068941),其狀態實際上是兩個伽瑪分佈。 'reset'什麼也不做,因爲它只是要求任何下面的值獨立於以前的引擎使用。 –
@sftrabbit那麼在你調用'operator()'的時候有人做了一個分配來積累狀態的'reset()'呢?例如,每個後續調用'operator()'都可以給你一個增加的範圍......這也解釋了爲什麼'operator()'不是const我猜? – David
@Dave是的,當你繼續調用'operator()'的時候,沒有任何理由可以改變分佈。這只是意味着結果值依賴於以前的調用。 –