X-Git-Url: https://hackdaworld.org/gitweb/?p=physik%2Fnlsop.git;a=blobdiff_plain;f=random.c;h=468a3a5d877cd329801d2546048dd572a14e9bd0;hp=17cbd73c887e1d5a9656431c5b7465b7f98b9c2a;hb=f9a7f27f952d23ebd856c4c60fbdf7c024f95f7b;hpb=5d5a9a58e9ecb4221b1c41e536b9648500b9b41d diff --git a/random.c b/random.c index 17cbd73..468a3a5 100644 --- a/random.c +++ b/random.c @@ -9,6 +9,8 @@ #include #include #include +#include +#include #include "random.h" @@ -53,6 +55,9 @@ u32 get_rand(u32 max) { if(c_ptr>=b_ptr+BUFSIZE) { +#ifdef MORE_PRINTF + printf("getting another %d bytes of random data ...\n",BUFSIZE); +#endif if(read(rand_fd,b_ptr,BUFSIZE*sizeof(u32)) assume random file, end reached */ @@ -61,8 +66,11 @@ u32 get_rand(u32 max) read(rand_fd,b_ptr,BUFSIZE*sizeof(u32)); } c_ptr=b_ptr; +#ifdef MORE_PRINTF + printf("got it!\n"); +#endif } - + return((u32)(*(c_ptr++)*(max*1.0/((long long unsigned int)URAND_MAX+1)))); } @@ -71,3 +79,18 @@ u32 get_rand_lgp(u32 max,double a,double b) return((u32)(1.0*max*(-1.0*b+sqrt(b*b+2*a*((b+a/2)*get_rand(URAND_MAX)/((long long unsigned int)URAND_MAX+1))))/a)); } +u32 get_rand_reject(u32 max_x,u32 max_y,u32 *graph) +{ + u32 x,y; + unsigned char ok; + + ok=0; + while(!ok) + { + x=get_rand(max_x); + y=get_rand(max_y); + if(y<=graph[x]) ok=1; + } + + return x; +}