#include<iostream>
#include<random>
unsigned int random_gen()
{
unsigned int rnd = 0;
#ifdef WIN32
rand_s(&rnd);
#else // WIN32
rnd = rand();
#if (RAND_MAX < 65536)
rnd = rand()*(RAND_MAX + 1) + rnd;
#endif //(RAND_MAX < 65536)
#endif // WIN32
return rnd;
}
float random_float()
{
unsigned int rnd = 0;
#ifdef WIN32
rand_s(&rnd);
return ((float)rnd / (float)UINT_MAX);
#else // WIN32
rnd = rand();
#if (RAND_MAX < 65536)
rnd = rand()*(RAND_MAX + 1) + rnd;
return((float)rnd / (float)(RAND_MAX*RAND_MAX));
#endif //(RAND_MAX < 65536)
return ((float)rnd / (float)RAND_MAX);
#endif // WIN32
}
float rand_uniform_strong(float min, float max)
{
if (max < min) {
float swap = min;
min = max;
max = swap;
}
return (random_float() * (max - min)) + min;
}
float rand_scale(float s)
{
float scale = rand_uniform_strong(1, s);
if (random_gen() % 2) return scale;
return 1. / scale;
}
int main() {
float rand_coef = 1.33;
int init_w = 224;
int init_h = 224;
for (int i = 0; i < 20; i++)
{
float random_val = rand_scale(rand_coef);
//printf("%.6f \n" , (random_val));
int dim_w = roundl(random_val * init_w / 32 + 1) * 32;
int dim_h = roundl(random_val * init_h / 32 + 1) * 32;
if (random_val < 1 && (dim_w > init_w || dim_h > init_h)) dim_w = init_w, dim_h = init_h;
printf("dim_w %d dim_h %d \n", dim_w,dim_h);
int max_dim_w = roundl(rand_coef*init_w / 32 + 1) * 32;
int max_dim_h = roundl(rand_coef*init_h / 32 + 1) * 32;
//int dim_w =
}
system("pause");
return 0;
}
输出: