Tiny Mersenne Twister

READ ME FIRST

このアーカイブには二種類のプログラムが入っています。 ひとつはTinyMTで、もうひとつはTinyMTDC です。 TinyMT は疑似乱数生成器で、TinyMTDC はTinyMT用のパラメータ生成器です。

TinyMT

TinyMT はMersenne TwisterやWELL RNGと比べて小さな疑似乱数生成器です。 32bit 出力の tinymt32 は内部状態空間に16バイト、パラメータに12バイトしか使いません。 64bit 出力の tinymt64 は内部状態空間に16バイト、パラメータに16バイト使用します。 TinyMT によって生成される疑似乱数列の周期は2127-1になります。

必要ライブラリ

TinyMT は C言語で書かれていて、 c99の stdint.h と inttypes.h を使用しています。

チェックプログラムのコンパイルとチェック

  1. tinymtにcdして
  2. make all.
  3. check32 と check64 ができる
  4. プログラムの動作を確認するために、
    check32 8f7011ee fc78ff1f 3793fdff > tmp32.txt
    diff tmp32.txt check32.out.txt
    check64 fa051f40 ffd0fff4 58d02ffeffbfffbc > tmp64.txt
    diff tmp64.txt check64.out.txt
    diff で違いがなければO.K.

TinyMTDC

TinyMTDC はTinyMT用のパラメータ生成器です。TinyMT は TinyMTDC で生成されたパラメータを使用しなければなりません。TinyMTDC はユーザの 指定するidごとに216個以上のパラメータを生成することが できます。

必要ライブラリ

TinyMTDC はC++で書かれていて、テンプレート機能を使用しています。

コンパイル

  1. dc/srcに cd して
  2. make all
  3. tinymt32dc, tinym64dc, getid が作られる

プログラムと使用方法

tinymt32dc [-v] [-c count] [-s seed_string] [-f outputfile] ID
tinymt64dc [-v] [-c count] [-s seed_string] [-f outputfile] ID
この二つのプログラムはそれぞれ tinymt32 と tinymt64 用のパラメータを生成します。
getid -b 32|64 mat1 mat2
getid -b 32|64 -r id seq
このプログラムはTinyMT のパラメータセットからidと内部カウンタを計算します。 -r が指定されると逆に、id と内部カウンタからパラメータのmat1 と mat2 を 計算します。
TinyMTDC の出力の最後の行のmat1 と mat2 を引数にして、gitid を実行し 得られた seq の値から1を引いて TinyMTDC の -s パラメータに指定する ことによって、中断したパラメータ生成を続行することが出来ます。

TinyMTDC の出力形式

TinyMTDC は CSV形式の出力をします。ここでは出力形式の説明をします。

Column or RowDescription
The first row
# charactristic, type, id, mat1, mat2, tmat1, weight, delta
最初の行は常にこのとおりの出力をします。 この行は以下の出力の各カラムのタイトルになっています。
1st column charactristic 第1カラムは特性多項式を示しています。この特性多項式は0と1を係数とする 127次の既約多項式です。最高次の係数が最初にくるように(つまり降べきの順に) 16進数で表示しています。127次の多項式は128個の係数を持つので最初の16進数は 8以上の数になっています。また既約であることから、 最後の16進数は奇数になっています。
2nd column type 第2カラムはこのパラメータセットが32bit版TinyMT用か、64bit版用かを示しています。
3rd column id 第3カラムはユーザーが指定したIDを出力しています。
4th column mat1 第4カラムはmat1 パラメータを示しています。このカラムは16進数で表示されています。
5th column mat2 第5カラムはmat2 パラメータを示しています。このカラムは16進数で表示されています。
6th columns tmat 第6カラムは tmat パラメータを示しています。このカラムは16進数で表示されています。
7th column weight 第7カラムは特性多項式のハミングウェイトを示しています。項数128の半分の64程度から 大きく離れていないことが望ましいと言われています。
8th delta 第8カラムは TinyMTDC の内部評価値 total dimension defectを示しています。 0 が最もよい内部評価値となります。この値が小さくなるように tmat を選んでいます。

LICENSE

Copyright (c) 2011 Mutsuo Saito, Makoto Matsumoto, Hiroshima
University and The University of Tokyo. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
      copyright notice, this list of conditions and the following
      disclaimer in the documentation and/or other materials provided
      with the distribution.
    * Neither the name of the Hiroshima University nor the names of
      its contributors may be used to endorse or promote products
      derived from this software without specific prior written
      permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.