in reply to custom random number generator

Without further constraints, why not take a random number, if it's less than 0.5, return a random number between x/y and x; if the first random number exceeds 0.5, return a random number between x and x*y. Something like (untested):
sub r2 { my ($low, $high) = @_; $low + rand($high-$low); } sub myrand { my ($x, $y) = @_; rand() < .5 ? r2($x/$y, $x) : r2($x,$x*$y); }
(This assumes 1 <= $y < $x; adjust to taste).