#include #include #include #define LOOPS 1000000000 static unsigned long long x=1234567890987654321ULL,c=123456123456123456ULL, y=362436362436362436ULL,z=1066149217761810ULL,t; #define MWC (t=(x<<58)+c, c=(x>>6), x+=t, c+=(x>17), y^=(y<<43) ) #define CNG ( z=6906969069LL*z+1234567 ) #define KISS (MWC+XSH+CNG) static double alvo_s = 1 + 12345.67890123456; static double alvo_x = 1; unsigned int timer (void) { struct timeval tv; gettimeofday (&tv, NULL); return tv.tv_sec*1000 + tv.tv_usec/1000; } int main (void) { int i; int start, end; unsigned long long k; double k2; start = timer(); for (i = 0; i < LOOPS; ++i); end = timer(); printf ("Empty loop: %dms\n", end - start); start = timer(); for (i = 0; i < LOOPS; ++i) k = KISS; end = timer(); printf ("Kiss64 (int): %dms\n", end - start); start = timer(); for (i = 0; i < LOOPS; ++i) k2 = (KISS) / ((double)0xFFFFFFFFFFFFFFFFULL); end = timer(); printf ("Kiss64 (dbl): %dms\n", end - start); start = timer(); for (i = 0; i < LOOPS; ++i) alvo_x = (alvo_s * alvo_x) - floor (alvo_s * alvo_x); end = timer(); printf ("Alvo: %dms\n", end - start); return 0; }