元のメルセンヌ・ツイスタを使った乱数ライブラリ(AVX2対応)

2021/10/10 に大幅な改良をして、かなり高速化しました。
マクロ AVX2 を定義してコンパイルすると、AVX2 を使った高速なプログラムができます。
16ビットコンパイラにも TDM-GCC-64 10.3.0 にも VC++2022 にも対応しています。

浮動小数点数に特化した乱数ライブラリ(SSE2対応)

    32ビット整数の生成は他のに比べ少し遅くなりますが、浮動小数点数の生成はかなり高速です。

以下は最新のコンパイラで試していない過去のライブラリです。

SFMT:新しいメルセンヌ・ツイスタを使った乱数ライブラリ

これには、C/C++(zsfmt)、C#、Java、Visual Basic が含まれます。
また、プログラムを自動作成するためのC言語ソースや、
それぞれに、結果の確認と実行時間計測するテストプログラムが含まれます。
独立した系列を32個持っています。

XorShiftを使った乱数ライブラリ

これにも、C/C++(zxor)、C#、Java、Visual Basic が含まれます。
それぞれに、結果の確認と実行時間計測するテストプログラムが含まれます。
関数名などはメルセンヌ・ツイスタと共通にしているため不自然になっています。
SSE2に対応していないCPUやコンパイラではSFMTよりも高速です。
基になったプログラムは以下のようにシンプルです。
http://www.jstatsoft.org/v08/i14/

unsigned long xor128(){
  static unsigned long x=123456789,y=362436069,z=521288629,w=88675123;
  unsigned long t;
  t=(x^(x<<11));x=y;y=z;z=w; return( w=(w^(w>>19))^(t^(t>>8)) );
}

参考資料:メルセンヌ・ツイスタ http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html

参考文献:奥村晴彦 著「C言語による最新アルゴリズム事典」1991 技術評論社

zmtrand、zsfmt、zdsfmt 共通の特徴は以下です。

zsfmt の特徴は以下です。

その他の言語で書かれた Sfmt の特徴は以下です。

Sfmt で指定した MEXP に対する、乱数の周期の長さは以下の整数倍です。
zmtrand の周期は、4.31e6001 になります

  MEXP  保障された周期の長さ
   607    5.31e182
  1279    1.04e385
  2281    4.46e686
  4253   1.90e1280
 11213   2.81e3375
 19937   4.31e6001
 44497  8.54e13394
 86243  5.36e25961
132049  5.12e39750
216091  7.46e65049

主な関数の用途

InitMt(S)       整数の種Sによる初期化
InitMtEx(K,L)   長さLの配列Kによる初期化
NextMt()        32ビット符号なし整数の乱数
NextUnif()      0以上1未満の乱数(53bit精度)
NextInt(N)      0以上N未満の整数乱数
NextIntEx(N)    丸め誤差のない0以上N未満の整数乱数

NextBit()              0か1を返す(NextInt(2)の最高10倍高速)
NextByte()             0から255の値を返す
NextChisq(N)           自由度νのカイ2乗分布       p. 27
NextGamma(A)           パラメータAのガンマ分布     p. 31
NextGeometric(P)       確率Pの幾何分布             p. 34
NextTriangle()         三角分布                     p. 89
NextExp()              平均1の指数分布             p.106
NextNormal()           標準正規分布(最大8.57σ)     p.133
NextUnitVect(V,N)      N次元のランダム単位ベクトル p.185
NextBinomial(N,P)      パラメータN,Pの2項分布    p.203
NextBinormal(R,&X,&Y)  相関係数Rの2変量正規分布   p.211
NextBeta(A,B)          パラメータA,Bのベータ分布  p.257
NextPower(N)           パラメータNの累乗分布       p.305
NextLogistic()         ロジスティック分布           p.313
NextCauchy()           コーシー分布                 p.331
NextFDist(A,B)         自由度A,BのF分布          p.344
NextPoisson(L)         平均λのポアソン分布         p.412
NextTDist(N)           自由度Nのt分布             p.430
NextWeibull(A)         パラメータαのワイブル分布   p.431

ほかの関数や、より詳細な使い方は、それぞれの言語のテストプログラムを読んでください。
一部の関数ではパラメータの受け取り方が言語により異なります。