ズンドコキヨシ with C using 128bit XORshift(擬似乱数生成)

  • 0
    いいね
  • 0
    コメント
    この記事は最終更新日から1年以上が経過しています。

    ブックマークを整理してたら見つけた。
    http://d.hatena.ne.jp/jetbead/20121202/1354406422

    2.XORshift(擬似乱数生成)
    xor演算とビットシフトのみから高速に生成できる擬似乱数です。
    マラソンマッチなどで使えそうでしょうか。

    いえ。ズンドコキヨシで使えます。

    code

    http://ideone.com/NYXMBs

    #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しか見ていないのは贅沢な使い方だ。