|
|
|
@ -60,7 +60,7 @@ void shuffle(void *arr, size_t n, size_t size) |
|
|
|
|
size_t i; |
|
|
|
|
void* swp = (void*)calloc(1, size); |
|
|
|
|
for(i = 0; i < n-1; ++i){ |
|
|
|
|
size_t j = i + rand()/(RAND_MAX / (n-i)+1); |
|
|
|
|
size_t j = i + random_gen()/(RAND_MAX / (n-i)+1); |
|
|
|
|
memcpy(swp, (char*)arr+(j*size), size); |
|
|
|
|
memcpy((char*)arr+(j*size), (char*)arr+(i*size), size); |
|
|
|
|
memcpy((char*)arr+(i*size), swp, size); |
|
|
|
@ -699,7 +699,7 @@ int rand_int(int min, int max) |
|
|
|
|
min = max; |
|
|
|
|
max = s; |
|
|
|
|
} |
|
|
|
|
int r = (rand()%(max - min + 1)) + min; |
|
|
|
|
int r = (random_gen()%(max - min + 1)) + min; |
|
|
|
|
return r; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -717,10 +717,10 @@ float rand_normal() |
|
|
|
|
|
|
|
|
|
haveSpare = 1; |
|
|
|
|
|
|
|
|
|
rand1 = rand() / ((double) RAND_MAX); |
|
|
|
|
rand1 = random_gen() / ((double) RAND_MAX); |
|
|
|
|
if(rand1 < 1e-100) rand1 = 1e-100; |
|
|
|
|
rand1 = -2 * log(rand1); |
|
|
|
|
rand2 = (rand() / ((double)RAND_MAX)) * 2.0 * M_PI; |
|
|
|
|
rand2 = (random_gen() / ((double)RAND_MAX)) * 2.0 * M_PI; |
|
|
|
|
|
|
|
|
|
return sqrt(rand1) * cos(rand2); |
|
|
|
|
} |
|
|
|
@ -731,21 +731,21 @@ float rand_normal() |
|
|
|
|
int n = 12; |
|
|
|
|
int i; |
|
|
|
|
float sum= 0; |
|
|
|
|
for(i = 0; i < n; ++i) sum += (float)rand()/RAND_MAX; |
|
|
|
|
for(i = 0; i < n; ++i) sum += (float)random_gen()/RAND_MAX; |
|
|
|
|
return sum-n/2.; |
|
|
|
|
} |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
size_t rand_size_t() |
|
|
|
|
{ |
|
|
|
|
return ((size_t)(rand()&0xff) << 56) | |
|
|
|
|
((size_t)(rand()&0xff) << 48) | |
|
|
|
|
((size_t)(rand()&0xff) << 40) | |
|
|
|
|
((size_t)(rand()&0xff) << 32) | |
|
|
|
|
((size_t)(rand()&0xff) << 24) | |
|
|
|
|
((size_t)(rand()&0xff) << 16) | |
|
|
|
|
((size_t)(rand()&0xff) << 8) | |
|
|
|
|
((size_t)(rand()&0xff) << 0); |
|
|
|
|
return ((size_t)(random_gen()&0xff) << 56) | |
|
|
|
|
((size_t)(random_gen()&0xff) << 48) | |
|
|
|
|
((size_t)(random_gen()&0xff) << 40) | |
|
|
|
|
((size_t)(random_gen()&0xff) << 32) | |
|
|
|
|
((size_t)(random_gen()&0xff) << 24) | |
|
|
|
|
((size_t)(random_gen()&0xff) << 16) | |
|
|
|
|
((size_t)(random_gen()&0xff) << 8) | |
|
|
|
|
((size_t)(random_gen()&0xff) << 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
float rand_uniform(float min, float max) |
|
|
|
@ -755,7 +755,14 @@ float rand_uniform(float min, float max) |
|
|
|
|
min = max; |
|
|
|
|
max = swap; |
|
|
|
|
} |
|
|
|
|
return ((float)rand()/RAND_MAX * (max - min)) + min; |
|
|
|
|
|
|
|
|
|
if (RAND_MAX < 65536) { |
|
|
|
|
int rnd = rand()*(RAND_MAX + 1) + rand(); |
|
|
|
|
return ((float)rnd / (RAND_MAX*RAND_MAX) * (max - min)) + min; |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
return ((float)rand() / RAND_MAX * (max - min)) + min; |
|
|
|
|
} |
|
|
|
|
//return (random_float() * (max - min)) + min;
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -785,6 +792,9 @@ unsigned int random_gen() |
|
|
|
|
rand_s(&rnd); |
|
|
|
|
#else |
|
|
|
|
rnd = rand(); |
|
|
|
|
if (RAND_MAX < 65536) { |
|
|
|
|
rnd = rand()*(RAND_MAX + 1) + rnd; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
return rnd; |
|
|
|
|
} |
|
|
|
@ -807,3 +817,47 @@ float rand_uniform_strong(float min, float max) |
|
|
|
|
} |
|
|
|
|
return (random_float() * (max - min)) + min; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
float rand_precalc_random(float min, float max, float random_part) |
|
|
|
|
{ |
|
|
|
|
if (max < min) { |
|
|
|
|
float swap = min; |
|
|
|
|
min = max; |
|
|
|
|
max = swap; |
|
|
|
|
} |
|
|
|
|
return (random_part * (max - min)) + min; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#define RS_SCALE (1.0 / (1.0 + RAND_MAX)) |
|
|
|
|
|
|
|
|
|
double double_rand(void) |
|
|
|
|
{ |
|
|
|
|
double d; |
|
|
|
|
do { |
|
|
|
|
d = (((rand() * RS_SCALE) + rand()) * RS_SCALE + rand()) * RS_SCALE; |
|
|
|
|
} while (d >= 1); // Round off
|
|
|
|
|
return d; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
unsigned int uint_rand(unsigned int less_than) |
|
|
|
|
{ |
|
|
|
|
return (unsigned int)((less_than)* double_rand()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int check_array_is_nan(float *arr, int size) |
|
|
|
|
{ |
|
|
|
|
int i; |
|
|
|
|
for (i = 0; i < size; ++i) { |
|
|
|
|
if (isnan(arr[i])) return 1; |
|
|
|
|
} |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int check_array_is_inf(float *arr, int size) |
|
|
|
|
{ |
|
|
|
|
int i; |
|
|
|
|
for (i = 0; i < size; ++i) { |
|
|
|
|
if (isinf(arr[i])) return 1; |
|
|
|
|
} |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|