/** * HPC Challenge Class 2 -- Global Random Access * * IBM Research * (C) Copyright IBM Corp. 2005, All Rights Reserved * */ #include #include #include #include #include typedef unsigned long long u64Int; typedef long long s64Int; #ifndef N #define N (21) #endif #define TableSize (1ULL< PERIOD) n -= PERIOD; if (n == 0) return 0x1; temp = 0x1; for (i=0; i<64; i++) { m2[i] = temp; temp = (temp << 1) ^ ((s64Int) temp < 0 ? POLY : 0); temp = (temp << 1) ^ ((s64Int) temp < 0 ? POLY : 0); } for (i=62; i>=0; i--) if ((n >> i) & 1) break; ran = 0x2; while (i > 0) { temp = 0; for (j=0; j<64; j++) if ((ran >> j) & 1) temp ^= m2[j]; ran = temp; i -= 1; if ((n >> i) & 1) ran = (ran << 1) ^ ((s64Int) ran < 0 ? POLY : 0); } return ran; } double mysecond() { struct timeval tv; gettimeofday(&tv, 0); return tv.tv_sec + ((double) tv.tv_usec / 1000000); }