// thus on Fri, 10 Jul 1998 13:15:55 -0400, James wrote:
> In my code I needed numbers generated on a normal distribution (ie the
> bell curve thing) and use floats for that purpose. Anyway, here's the
> code.
Normal (aka Gaussian) random number generation reminds me... herein is a
function is heavily bastardized from Numerical Recipes in C.
ranf() if not defined can be duplicated via
#define ranf() ((double) random() / (double) RAND_MAX)
Of course you'll have to link with -lm (which includes the function log(),
which conflicts with circle's log() function). You can use something like
this to roll a players height and weigh, or if you're feeling really
motivated to devise a "normalized" spell damage system.
int
Gauss (int m, double s)
{
static int pass = 0;
static double y2;
double x1, x2, w, y1;
if (pass) {
y1 = y2;
} else {
do {
x1 = 2.0 * ranf () - 1.0;
x2 = 2.0 * ranf () - 1.0;
w = x1 * x1 + x2 * x2;
} while (w >= 1.0);
w = sqrt (-2.0 * log (w) / w);;
y1 = x1 * w;
y2 = x2 * w;
}
pass = !pass;
return ((int) (y1 * s + (double) m));
}
note: double's are used since in ye olde time, all machine floats were
coverted to doubles before use.
d.
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST