ブックマークを整理してたら見つけた。
http://d.hatena.ne.jp/jetbead/20121202/1354406422
2.XORshift(擬似乱数生成)
xor演算とビットシフトのみから高速に生成できる擬似乱数です。
マラソンマッチなどで使えそうでしょうか。
いえ。ズンドコキヨシで使えます。
code
#include <stdio.h>
#include <stdint.h>
// Thaks to http://d.hatena.ne.jp/jetbead
uint32_t xor128(void){
static uint32_t x = 123456789;
static uint32_t y = 362436069;
static uint32_t z = 521288629;
static uint32_t w = 88675123;
uint32_t t;
t = x ^ (x << 11);
x = y; y = z; z = w;
return w = (w ^ (w >> 19)) ^ (t ^ (t >> 8));
}
int main(void) {
int idx;
uint32_t val;
int zuncnt = 0;
for(idx = 0; idx < 200; idx++) {
val = xor128();
if (val % 2 == 0) {
printf("[Doko]");
if (zuncnt == 4) {
printf("...Kiyoshi!\n");
break;
}
zuncnt = 0;
} else {
printf("[Zun]");
zuncnt++;
}
}
return 0;
}
結果
結果
Success time: 0 memory: 2156 signal:0
[Doko][Doko][Doko][Doko][Doko][Doko][Zun][Doko][Doko][Zun][Doko][Zun][Doko][Zun][Doko][Zun][Doko][Doko][Doko][Doko][Doko][Doko][Doko][Doko][Zun][Zun][Zun][Doko][Doko][Zun][Zun][Doko][Doko][Doko][Zun][Zun][Doko][Doko][Zun][Zun][Doko][Doko][Doko][Zun][Zun][Doko][Zun][Doko][Doko][Zun][Doko][Zun][Zun][Doko][Doko][Doko][Zun][Doko][Doko][Doko][Doko][Zun][Doko][Doko][Zun][Doko][Doko][Doko][Zun][Doko][Doko][Doko][Zun][Doko][Doko][Doko][Doko][Doko][Doko][Zun][Zun][Doko][Zun][Doko][Doko][Zun][Doko][Zun][Zun][Doko][Zun][Doko][Doko][Zun][Doko][Zun][Doko][Zun][Doko][Zun][Zun][Doko][Doko][Doko][Zun][Zun][Doko][Zun][Zun][Zun][Zun][Zun][Zun][Doko][Zun][Zun][Zun][Doko][Zun][Doko][Doko][Doko][Zun][Doko][Doko][Zun][Doko][Doko][Doko][Doko][Zun][Zun][Zun][Doko][Doko][Zun][Zun][Zun][Doko][Doko][Zun][Doko][Doko][Doko][Zun][Zun][Doko][Doko][Doko][Doko][Zun][Doko][Doko][Doko][Doko][Zun][Zun][Zun][Doko][Doko][Zun][Doko][Zun][Zun][Zun][Zun][Doko]...Kiyoshi!
128ビットの乱数を得ながら、そのLSBしか見ていないのは贅沢な使い方だ。