27#define CRC64_POLY 0xC96C5795D7870F42ULL
29static uint64_t crc64_table[256];
30static uint64_t rand_seed = 0;
39 for (
int i = 0; i < 256; i++) {
42 for (ct = crc64_table + i, *ct = i, j = 8; j > 0; j--)
43 *ct = (*ct >> 1) ^ (-(*ct & 1) & CRC64_POLY);
65crc64(
const void *input,
size_t sz)
90 const uint8_t *in_bytes = input;
92 ASSERT3U(crc64_table[128], ==, CRC64_POLY);
93 for (
size_t i = 0; i < sz; i++)
94 crc = (crc >> 8) ^ crc64_table[(crc ^ in_bytes[i]) & 0xFF];
125 rand_seed =
crc64(&rand_seed,
sizeof (rand_seed));
151 double z = sqrt(-2 * log(x)) * cos(2 * M_PI * y);
#define ASSERT3U(x, op, y)
API_EXPORT uint64_t crc64(const void *input, size_t sz)
API_EXPORT void crc64_state_init_impl(uint64_t *crc)
API_EXPORT void crc64_srand(uint64_t seed)
API_EXPORT void crc64_init(void)
API_EXPORT uint64_t crc64_append(uint64_t crc, const void *input, size_t sz)
API_EXPORT double crc64_rand_normal(double sigma)
static void crc64_state_init(uint64_t *crc)
API_EXPORT uint64_t crc64_rand(void)
API_EXPORT double crc64_rand_fract(void)