Search on the blog

2016年9月26日月曜日

xorshiftの周期を調べてみた

 xorshiftは擬似乱数ジェネレータの一つであり、232-1という周期を持つらしい。
これはなかなか便利そうだ。さっそく仕事で使えそう(というか仕事で教えてもらったのだった...)。

本当に周期が232-1なのか気になったので試したみた。

#include <iostream>

using namespace std;

const uint32_t x0 = 2463534242;

uint32_t xorshift() {
  static uint32_t x = x0;
  x = x ^ (x << 13);
  x = x ^ (x >> 17);
  return x = x ^ (x << 5);
}

int main(int argc, char *argv[])
{
  uint32_t i = 1;
  while (xorshift() != x0)
    ++i;
  cout << i << endl;
  return 0;
}

実行結果
4294967295
本当!

0 件のコメント:

コメントを投稿