#include #include unsigned long seed=7; void ansistandardsrand(unsigned int seed_set); double ansistandardrand(long a, long c); /* Exercise 1.5, see README */ main(int argc, char **argv) { /* This code assumes a mantissa in a double greater than the size of an int. If this is not true on your machine, you may end up in an infinite loop */ int i; long a,c; double x,y; FILE *fp; ansistandardsrand(7); fp=fopen("ansixy_mod1.dat","w"); for (i=0;i<10000;i++) { a=432764376; c=32132; x=ansistandardrand(a,c); y=ansistandardrand(a,c); fprintf(fp,"%.10g %.10g\n",x,y); } fclose(fp); fp=fopen("ansixy_mod2.dat","w"); for (i=0;i<10000;i++) { a=436; c=322; x=ansistandardrand(a,c); y=ansistandardrand(a,c); fprintf(fp,"%.10g %.10g\n",x,y); } fclose(fp); fp=fopen("ansixy_mod3.dat","w"); for (i=0;i<10000;i++) { a=100076; c=132672; x=ansistandardrand(a,c); y=ansistandardrand(a,c); fprintf(fp,"%.10g %.10g\n",x,y); } fclose(fp); fp=fopen("ansixy_mod4.dat","w"); for (i=0;i<10000;i++) { a=4329984; c=13178; x=ansistandardrand(a,c); y=ansistandardrand(a,c); fprintf(fp,"%.10g %.10g\n",x,y); } fclose(fp); fp=fopen("ansixy_mod5.dat","w"); for (i=0;i<10000;i++) { a=432109; c=1232178; x=ansistandardrand(a,c); y=ansistandardrand(a,c); fprintf(fp,"%.10g %.10g\n",x,y); } fclose(fp); } double ansistandardrand(long a, long c) { /* Original: long a=1103515245; long c=12345; */ long div=32768; seed = seed*a + c; return (double) ((seed/65536) % div)/div; } void ansistandardsrand(unsigned int seed_set) { seed=seed_set; }