Написание XORshift128 pRNG с целыми числами со знаком - PullRequest
0 голосов
/ 29 апреля 2020

На языке программирования, который я использую (GML), все числа ограничены знаковыми int64 (или float64s). Как бы я реализовал этот XORshift128 + pRNG (в настоящее время закодированный в C) с такими ограничениями? Я бы также принял большее количество битов, если бы программирование было проще.

static uint32_t s[4] = { 0x8764000b, 0xf542d2d3, 0x6fa035c3, 0x77f2db5b };

static inline uint32_t rotl(const uint32_t x, int k) {
    return (x << k) | (x >> (32 - k));
}

uint32_t next(void) {
    const uint32_t result = s[0] + s[3];

    const uint32_t t = s[1] << 9;

    s[2] ^= s[0];
    s[3] ^= s[1];
    s[1] ^= s[2];
    s[0] ^= s[3];

    s[2] ^= t;

    s[3] = rotl(s[3], 11);

    return result;
}
...