アルゴリズム

動的メモリ確保を行わない std::seed_seq を作ってみた。

C++0x の の話。 基本的なこととかは 本の虫: C++0xの新しい乱数ライブラリ、random を参照してください。 さて、上記の記事で登場している std::seed_seq ですが、 N3126 の 26.5.7.1 Class seed_seq によると、このクラスは内部に std::vector を保持して…

Xorshift の初期化は

いろいろと検証コード書いて試してみた結果、こんな感じで行くことにしました: コード全文: http://ideone.com/RQ4KB struct Xor128 { // ... // 種を元に乱数を初期化する explicit Xor128( int_type seed ) : x(123456789), y(362436069), z(521288629),…

Xorshift の初期値読み飛ばしについて検証してみた。

動機 前回の日記でやった見積りについてご指摘いただいたので、 実際に検証してみます。 検証方法 検証方法としては、単純に、内部状態の各 bit に対し、その bit だけが立った乱数生成器を用意し、 その乱数生成器を状態遷移させていき、その内部状態の変化…

Xorshift アルゴリズムの偏りを除去するのに必要な「読み飛ばし」回数を見積もる

前回の日記で Xorshift アルゴリズムについて書いた時、最後に 「初期化された後にしばらく乱数列を読み飛ばせば偏りは簡単に回避できる」 と書きましたが、では偏りを回避するには、何回くらい読み飛ばせばよいのか、少し考えてみました。 で、それを考える…

Xorshift 乱数生成アルゴリズムを書いてみた。

前回 BarrageLL の乱数について触れたので、今回もその続き。 計算機の応用において、擬似乱数というのは大切です。 なので、世の中には、いろいろな擬似乱数の生成アルゴリズムが存在するわけですが、 今回はその中で比較的新しいアルゴリズム、 xorshift …