12 uint64_t x =
static_cast<uint64_t
>(seed);
13 x ^= (
static_cast<uint64_t
>(call_site) + 0x9e3779b97f4a7c15ULL);
14 x ^= (
static_cast<uint64_t
>(
bar_index) + 1ULL) * 0xbf58476d1ce4e5b9ULL;
15 x += 0x9e3779b97f4a7c15ULL;
16 x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9ULL;
17 x = (x ^ (x >> 27)) * 0x94d049bb133111ebULL;
19 double u =
static_cast<double>(x >> 11) * (1.0 / 9007199254740992.0);
20 return lo + u * (hi - lo);