/* l'infame generatore RANDU */ #include #include #define ANSIC #define TOT 10000000000UL #ifdef IBM #define SEED 1UL #define MULTIPLIER 65539UL #define INCREMENT 0UL /* 2^31 = 2147483648 */ #define MODULUS 2147483648UL #endif #ifdef IBM2 #define SEED 1UL #define MULTIPLIER 1277UL #define INCREMENT 0UL /* 2^17 = 131072 */ #define MODULUS 131072UL #endif #ifdef ANSIC #define SEED 12345UL #define MULTIPLIER 1103515245UL #define INCREMENT 12345UL /* 2^31 = 2147483648 */ #define MODULUS 2147483648UL #endif #define SUCCESSO 0 #define ROVINA -9 /*****************************************************************************/ int main(void) { unsigned long i; unsigned long my_random, my_old; printf("#seed %u multiplier %u increment %u modulus %u\n", SEED, MULTIPLIER, INCREMENT, MODULUS); my_random = SEED; for(i=0; i< TOT; i++){ my_old = my_random; my_random = MULTIPLIER * my_random + INCREMENT; my_random = my_random % MODULUS; if(i>0){ double a = (double)my_old/(double)MODULUS; double b = (double)my_random/(double)MODULUS; if(a<=0.0005 && b<=0.0005){ printf("%g %g\n",a,b); } } } return SUCCESSO; }