Tiny Mersenne Twister (TinyMT)のObjective-Cラッパーを作った。→GitHub
TinyMTのAPIはすごくシンプルで特にラップしなくても容易に使えるのだが、Mac OS X / iOS向けにC標準の型でなくNSUIntegerやCGFloatを返すように作った。
特にiOSではコンパクトで質の良い疑似乱数生成器として有用だと考えている。
TinyMT.hをインポートして下記のように使う。
NSUInteger seed = 4649;
TinyMT *random = [[TinyMT alloc] initWithSeed:seed]
NSUInteger u = [random generate]; // [0..NSUIntegerMax]
CGFloat f = [random generateFloat]; // [0.0...1.0)
[random release];
名前だけ見るとフレームワークとして使えそうなのだけど、僕がXcodeでのライブラリ作りを習得していないせいもあって、今のところTinyMT.h, TinyMT.m, tinymt32.h, tinymt32.c, tinymt64.h, tinymt64.c をプロジェクトにコピーして使ってほしい。(iOSで使う場合は tinymt64.* は不要)
注意してほしいことがひとつ。ILP32環境では32bit版TinyMTを、LP64環境では64bit版TinyMTを使っており、32bit/64bitで同じ値をseedにしても生成される結果が異なる。32bit/64bit双方で同じ乱数系列を使いたい場合はTinyMTのC APIを直接使うべし。
TinyMT本体のライセンスはNew BSD Lisenceで、MTKitはMIT License。