suppose your RNG generates between 1 and 1000 you can feed that number to a function that reformats the distribution.

e.g.

float x = random(1,1000);

float y = 1 + 100*exp(x/500); // 101 .. 739

float z = exp(10/x); // 22000 .. 1

to get another distribution.

float x = random(1,1000);

float y = x + (x/2?10*sin(x):1000/x; // usefulness of this one has to be investigated

get the idea?