X-Git-Url: https://hackdaworld.org/gitweb/?p=physik%2Fmorpheus.git;a=blobdiff_plain;f=random.c;h=0b7304f522d3f7dfa7aba85d247d4f8d294f16a4;hp=73e69f5e070082a98754d84df64fd5785b51c963;hb=3ec676caee02b75707e472b0294e8be51aab4c42;hpb=f463ab26135aa2850eee73b75f11103dd5f52a40 diff --git a/random.c b/random.c index 73e69f5..0b7304f 100644 --- a/random.c +++ b/random.c @@ -5,23 +5,35 @@ #include #include +#include #include "defines.h" -extern int sum_z_segments; +/* global & extern variables */ +extern u32 sum_z_segments; +extern int random_fd; /* return random integer between 0 - max */ -int rand_get(int max) { - return((int) (rand() * (max*1.0/RAND_MAX)) ); +u32 rand_get(u32 max) +{ + u32 rand_int; + if(read(random_fd,&rand_int,4)!=4) + { + puts("failed reading 4 bytes of random data"); + return -23; + } + /* segments numbered 0...max-1 */ + return((u32)(rand_int*(max*1.0/URAND_MAX))); } /* get z value (linear growth of probability with depths) */ -int rand_get_lgp(int slope_cc,int start_cc) { - int z,i; - z=rand_get(sum_z_segments); - for(i=0;;i++) { - z-=i*slope_cc; +u32 rand_get_lgp(int slope_nel,int start_nel) { + int z; + u32 i; + z=rand_get(sum_z_segments)+1; /* +1 as rand_get returns values 0...max-1 */ + for(i=1;;i++) { + z-=(start_nel+i*slope_nel); if(z<=0) break; } - return i; + return(i-1); /* return values 0...z_seg-1 */ }