Generating semi random numbers

M

Matt Krevs

Hi all

I'm doing some load testing and want to generate some numbers within a given
range. My problem is that I want most of the numbers to be close to the
middle, and only some at either high or low ends of the spectrum

eg if the range is 0-100, I want 70% of the numbers to be betwee 40 and 60.

From my vague memories from school maths, I kind of want to implement a bell
curve and use various standard deviation functionality. From my description
you can probably figire out I have fairly hazy recollections :)

Would someone be kind enough to direct me to a link that could give me more
information and/or some examples?

Thanks
 
B

Boris Stumm

Matt said:
I'm doing some load testing and want to generate some numbers within a
given range. My problem is that I want most of the numbers to be close to
the middle, and only some at either high or low ends of the spectrum

eg if the range is 0-100, I want 70% of the numbers to be betwee 40 and
60.

java.util.Random#nextGaussian() maybe?
 
D

Daniel Dyer

Hi all

I'm doing some load testing and want to generate some numbers within a
given
range. My problem is that I want most of the numbers to be close to the
middle, and only some at either high or low ends of the spectrum

eg if the range is 0-100, I want 70% of the numbers to be betwee 40 and
60.

From my vague memories from school maths, I kind of want to implement a
bell
curve and use various standard deviation functionality. From my
description
you can probably figire out I have fairly hazy recollections :)

Would someone be kind enough to direct me to a link that could give me
more
information and/or some examples?

Thanks

As Boris suggests, use the nextGaussian method of java.util.Random. This
gives you a distribution with a mean of zero and a standard deviation of
one. If you need to adjust the distribution, multiply by the required
standard deviation and add the required mean:

Random rng = new Random();
double value = rng.nextGuassian() * standardDeviation + mean;

Dan.
 
S

Simon

Daniel said:
As Boris suggests, use the nextGaussian method of java.util.Random.
This gives you a distribution with a mean of zero and a standard
deviation of one. If you need to adjust the distribution, multiply by
the required standard deviation and add the required mean:

Random rng = new Random();
double value = rng.nextGuassian() * standardDeviation + mean;

Note however, that this will not guarantee the result to be in any fixed
interval, like, e.g. 0-100, as the OP requested. Maybe you can specify your
requirements more precisely. The binomial distribution could be a good choice.
Several distributions are implemented in this library:

http://dsd.lbl.gov/~hoschek/colt/

Cheers,
Simon
 
I

iandjmsmith

Simon said:
Note however, that this will not guarantee the result to be in any fixed
interval, like, e.g. 0-100, as the OP requested. Maybe you can specify your
requirements more precisely. The binomial distribution could be a good choice.
Several distributions are implemented in this library:

http://dsd.lbl.gov/~hoschek/colt/

Cheers,
Simon

Before anyone rushes to use this, perhaps you could check the problems
discussed in this thread
http://groups.google.co.uk/group/comp.lang.java.programmer/browse_frm/thread/dffff3adce0b23f2


If the problems have been fixed or did not exist in the first place
then fine. Otherwise I think it needs some maintenance work done on it
before use.

Ian Smith
 
L

Luc The Perverse

Matt Krevs said:
Hi all

I'm doing some load testing and want to generate some numbers within a
given range. My problem is that I want most of the numbers to be close to
the middle, and only some at either high or low ends of the spectrum

eg if the range is 0-100, I want 70% of the numbers to be betwee 40 and
60.

From my vague memories from school maths, I kind of want to implement a
bell curve and use various standard deviation functionality. From my
description you can probably figire out I have fairly hazy recollections
:)

Would someone be kind enough to direct me to a link that could give me
more information and/or some examples?

I don't know anything about nextGaussian like the other people suggested -
but if you could generate a curve of the probabilities of every location
that you want, and then integrate, you could solve for it and use a random
floating point number between 0 and 1. (This is fairly simply calculus.)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,021
Latest member
AkilahJaim

Latest Threads

Top