I am thinking of using an exponential distribution for this random number generator and If i am generating about a 100 numbers, it should average to a particular value say 7.5. How do I go about this?
If you want the expected value to be 7.5, just generate exponentials with a rate of 1/7.5 using an external library function or by implementing your own inverse transform routine.
If you want the average of 100 values to be exactly 7.5, you can play some interesting games to achieve this. To get an average of 7.5 with 100 things, their sum must be 750. It turns out that distributing N points uniformly on a range R yields a Poisson process with rate N/R, and the distance between Poisson occurrences has an exponential distribution with the same rate. That leads to the following (and relatively simple) algorithm:
poisson
of length 101 containing the values 0 and 750.poisson[i] - poisson[i-1]
for i = 1,...,100.My Java is rusty, so I implemented it in a different language, but here are the results when analyzed with the statistics package JMP:
Here's my implementation in Ruby, which is practically pseudocode, in case you're interested. Should be easy to convert to Java.
N = 100
TARGET_MEAN = 7.5
total = N * TARGET_MEAN
poisson = [0, total]
(N - 1).times { poisson << rand(0.0..total) }
poisson.sort!
(1...poisson.length).each { |i| p poisson[i] - poisson[i-1] }