C
C++
Objective-C
アルゴリズム
HTTPS

コピペで使える乱数メソッド

rand()で作った値が偏ってて使えないので、色々ググって実装。
アルゴリズムはXorshiftを使用。

C
unsigned long sd[4] = { 123456789, 362436069, 521288629, 88675123 };

void seed(unsigned long s) {
    for (int i = 1 ; i <= 4; i++) {
        sd[i - 1] = s = 1812433253U * (s ^ (s >> 30)) + i;
    }
}

unsigned long xrand(unsigned int min, unsigned int max) {
    unsigned long t;
    t = (sd[0] ^ (sd[0] << 11));
    sd[0] = sd[1];
    sd[1] = sd[2];
    sd[2] = sd[3];
    return floor(min + (sd[3] = (sd[3] ^ (sd[3] >> 19) ) ^ (t ^ (t >> 8))) % ((max + 1) - min));
}

呼び出し元

Objective-C
// シード値を設定
seed((unsigned long)[[NSDate date] timeIntervalSince1970]);

// 1 ~ 100の乱数を作成
for (int i = 0; i < 100; ++i) {
    NSLog(@"%ld", xrand(1, 100));
}

ログ

Output
18
31
49
25
90
75
41
83
2
52
88
63
76
4
.
.
.

ひとまず、rand()よりは使えそうかな。

参考
https://ja.wikipedia.org/wiki/Xorshift