X-Git-Url: https://hackdaworld.org/gitweb/?p=physik%2Fmorpheus.git;a=blobdiff_plain;f=random.c;h=b2e11fd1fbc621486c23dccf940514e0ffe7fd18;hp=51b310b0fa1ff175bbca64095fb8c8d9b88297e6;hb=4763687aeb58d8a251e697a9c48d458477783238;hpb=2114472cdcc3dc98f31f44f104148baaf4058651 diff --git a/random.c b/random.c index 51b310b..b2e11fd 100644 --- a/random.c +++ b/random.c @@ -10,33 +10,39 @@ #include "defines.h" /* global and extern variables */ -extern u32 sum_z_cells; +extern u32 gr; extern int random_fd; +extern u32 *rand_buf,*rand_current; /* return random integer between 0 - max-1 */ u32 rand_get(u32 max) { - u32 rand_int; - if(read(random_fd,&rand_int,4)!=4) + if(rand_current>=rand_buf+(RAND_BUF_SIZE/sizeof(u32))) { - puts("failed reading 4 bytes of random data"); - return -23; + printfd("debug: reading new random bytes\n"); + if(read(random_fd,rand_buf,RAND_BUF_SIZE)!=RAND_BUF_SIZE) + { + puts("failed reading 1 mega bytes of random data"); + return -23; + } + rand_current=rand_buf; } /* cells numbered 0...max-1 */ - return((u32)(rand_int*(max*1.0/URAND_MAX))); + return((u32)(*(rand_current++)*(max*1.0/URAND_MAX))); } /* get z value (linear growth of probability with depths) */ -u32 rand_get_lgp(int slope_nel,int start_nel) +u32 rand_get_lgp(int slope,int start,u32 z_max) { int z; - u32 i; - z=rand_get(sum_z_cells)+1; /* +1 as rand_get returns values 0...max-1 */ - for(i=1;;i++) { - z-=(start_nel+i*slope_nel); + u32 i,weighted_sum_z; + weighted_sum_z=z_max*start+slope*gr; + z=rand_get(weighted_sum_z)+1; /* +1 as rand_get returns values 0...max-1 */ + for(i=1;;i++) + { + z-=(start+i*slope); if(z<=0) break; } return(i-1); /* return values 0...z_cell-1 */ } -