#include #include #include #include static inline uint64_t rotl(const uint64_t x, int k) { return (x << k) | (x >> (64 - k)); } static uint64_t s[4]; uint64_t next(void) { const uint64_t result = s[0] + s[3]; const uint64_t t = s[1] << 17; s[2] ^= s[0]; s[3] ^= s[1]; s[1] ^= s[2]; s[0] ^= s[3]; s[2] ^= t; s[3] = rotl(s[3], 45); return result; } static uint64_t get_system_time(void) { struct timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec * 1000000 + tv.tv_usec; } int f(uint64_t *p, int l) { int c = 0; for(int i = 1; i < l; i++) { c += p[i] == p[i - 1]; } return c; } int main() { uint64_t *p = calloc(1000000000, sizeof *p); for(int i = 0; i < 1000000000; i++) p[i] = next(); for(int i = 0; i < 10; i++) { uint64_t start = get_system_time(); const volatile int u = f(p, 1000000000); printf("%.3f\n", (get_system_time() - start) * 1E-6); } }