疑似乱数2at TECH
疑似乱数2 - 暇つぶし2ch108:デフォルトの名無しさん
08/05/01 23:36:04
英語版MTを読んでいたらこんなのを見つけた。
URLリンク(en.wikipedia.org)
で、cで実装してみた。
あんまり使えないと思うけど。

/* Complementary Multiply With Carry */
void initialize( unsigned long );
unsigned long cmwc( void );
enum { A = 3636507990, B = 0xffffffff, R = 1024 };
unsigned long seed[ R ], index, c;

void initialize( unsigned long n )
{
unsigned long i;
for (i=0; i<R; i++) {
seed[ i ] = n;
n = n * 1103515245 + 12345;
}
index = c = 0;
}
unsigned long cmwc( void )
{
unsigned long x;
unsigned long long t;
t = (unsigned long long)seed[ index ] * A + c;
x = B - (unsigned long)( t & B );
c = (unsigned long)( t >> 32 );
seed[ index ] = x;
if ( ++index >= R ) index = 0;
return x;
}


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch