splitmix64 的实现存档。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include <cstdint>

uint64_t splitmix64(uint64_t x) {
    // 固定的“魔法”常数,都是精心挑选的
    x += 0x9e3779b97f4a7c15;
    x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
    x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
    x = x ^ (x >> 31);
    return x;
}