投稿数 - 437, コメント - 59536, トラックバック - 156

C++ TR1

Visual C++の今後
TR1

Visual C++ に含まれるのと含まれないのでは、世の中の扱いが大きく変わると思うので、これはとてもよいニュースだろう。

επιστημηさんのところで触れられている「メルセンヌ・ツイスタ」。とても良い乱数生成エンジン(らしい)。速度が非常に速い(らしい)。仕組みはよく知らないけど。ちなみに boost で書くと以下のようになる。

#include <iostream>
#include <boost/random.hpp>
using namespace std;
using namespace boost;
int main(){
    mt19937 engine(1);
    uniform_int<int> distribution(0, 10);
    variate_generator<mt19937, uniform_int<int> > gen(engine, distribution);
    for(int i = 0; i < 100; i++){
        cout << gen() << endl;
    }
    return 0;
}

これの素晴らしいところは、乱数エンジンと分布を別に扱い、それぞれ好きに組み合わせられるというところだ。個人的には乱数エンジンよりも、分布の扱いが楽チンなのが重要だと思う。

分布のテンプレートは沢山あって、bernoulli_distribution(ベルヌーイ分布)やexponential_distribution(指数分布)なんてのもある(しつこいけど、仕組みは知らない)。

乱数エンジンの話になると「SFMT の boost 実装は?」ってなる。まだないはずなので誰かチャレンジしてみてはどうだろうか。欲しい人は結構いると思う。

投稿日時 : 2007年11月14日 11:07

フィードバック

# re: C++ TR1

少なくてもrand関数以外を使いたいですねw
2007/11/14 11:12 | アキラ

# re: C++ TR1

>少なくてもrand関数以外を使いたいですねw

同意w
2007/11/14 13:10 | 囚人

# re: C++ TR1

メルセンヌ・ツイスタ
http://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%AB%E3%82%BB%E3%83%B3%E3%83%8C%E3%83%BB%E3%83%84%E3%82%A4%E3%82%B9%E3%82%BF

これ、開発者が日本人(松本眞・西村拓士)なんですよね。
当時ニュースになったのを覚えています。

方法論的にはm系列のアレンジらしいと聞いています。
m系列は簡単なためZ80アセンブラで実装したりしましたねぇ。
ゲームに乱数はほぼ必須ですから。
2007/11/14 14:36 | 凪瀬

# re: C++ TR1

>これ、開発者が日本人(松本眞・西村拓士)なんですよね。

SFMTも更に同じ人ですね(相方が変わってますけど)。
2007/11/14 19:05 | 囚人

# re: C++ TR1

>επιστημηさんのところで触れられている「メルセンヌ・ツイスタ」。とても良い乱数生成エンジン(らしい)。速度が非常に速い(らしい)。

最近は他のアルゴリズムも進歩してます。

速度はSFMTやXorShiftの方が速いです。
特にXorShiftは圧倒的です。
質はSFMTとかWellのほうがいいです。
SFMTやMTは状態空間がでかいのでメモリ使用量も多いのは場合によっては欠点です。
2007/11/14 23:22 | れい

# re: C++ TR1

SFMT のお噂はちらほら聞きますが、XorShift は初耳です。
boost で使うってなると今のとこ MT が最適なんでしょうか。
2007/11/14 23:44 | 囚人

コメントの投稿

タイトル
名前
URL
コメント