### 3.7.11 rand.inc

A collection of macros for generating random numbers, as well as 4 predefined random number streams: `RdmA, RdmB, RdmC,` and `RdmD`. There are macros for creating random numbers in a flat distribution (all numbers equally likely) in various ranges, and a variety of other distributions.

#### 3.7.11.1 Flat Distributions

`SRand(Stream)`. "Signed rand()", returns random numbers in the range [-1, 1].
Parameters:

- `Stream` = Random number stream.

`RRand(Min, Max, Stream)`. Returns random numbers in the range [Min, Max].
Parameters:

- `Min` = The lower end of the output range.
- `Max` = The upper end of the output range.
- `Stream` = Random number stream.

`VRand(Stream)`. Returns random vectors in a box from < 0, 0, 0> to < 1, 1, 1>
Parameters:

- `Stream` = Random number stream.

`VRand_In_Box(PtA, PtB, Stream)`. Like VRand(), this macro returns a random vector in a box, but this version lets you specify the two corners of the box.
Parameters:

- `PtA` = Lower-left-bottom corner of box.
- `PtB` = Upper-right-top corner of box.
- `Stream` = Random number stream.

`VRand_In_Sphere(Stream)`. Returns a random vector in a unit-radius sphere located at the origin.
Parameters:

- `Stream` = Random number stream.

`VRand_On_Sphere(Stream)`. Returns a random vector on the surface of a unit-radius sphere located at the origin.
Parameters:

- `Stream` = Random number stream.

`VRand_In_Obj(Object, Stream)` This macro takes a solid object and returns a random point that is inside it. It does this by randomly sampling the bounding box of the object, and can be quite slow if the object occupies a small percentage of the volume of its bounding box (because it will take more attempts to find a point inside the object). This macro is best used on finite, solid objects (non-solid objects, such as meshes and bezier patches, do not have a defined "inside", and will not work).
Parameters:

- `Object` = The object the macro chooses the points from.
- `Stream` = Random number stream.

#### 3.7.11.2 Other Distributions

##### 3.7.11.2.1 Continuous Symmetric Distributions

`Rand_Cauchy(Mu, Sigma, Stream)`. Cauchy distribution.
Parameters:

- `Mu` = Mean.
- `Sigma` = Standard deviation.
- `Stream` = Random number stream.

`Rand_Student(N, Stream)`. Student's-t distribution.
Parameters:

- `N` = degrees of freedom.
- `Stream` = Random number stream.

`Rand_Normal(Mu, Sigma, Stream)`. Normal distribution.
Parameters:

- `Mu` = Mean.
- `Sigma` = Standard deviation.
- `Stream` = Random number stream.

`Rand_Gauss(Mu, Sigma, Stream)`. Gaussian distribution. Like Rand_Normal(), but a bit faster.
Parameters:

- `Mu` = Mean.
- `Sigma` = Standard deviation.
- `Stream` = Random number stream.

##### 3.7.11.2.2 Continuous Skewed Distributions

`Rand_Spline(Spline, Stream)`. This macro takes a spline describing the desired distribution. The T value of the spline is the output value, and the .y value its chance of occuring.
Parameters:

- `Spline` = A spline determining the distribution.
- `Stream` = Random number stream.

`Rand_Gamma(Alpha, Beta, Stream)`. Gamma distribution.
Parameters:

- `Alpha` = Shape parameter > 0.
- `Beta` = Scale parameter > 0.
- `Stream` = Random number stream.

`Rand_Beta(Alpha, Beta, Stream)`. Beta variate.
Parameters:

- `Alpha` = Shape Gamma1.
- `Beta` = Scale Gamma2.
- `Stream` = Random number stream.

`Rand_Chi_Square(N, Stream)`. Chi Square random variate.
Parameters:

- `N` = Degrees of freedom (integer).
- `Stream` = Random number stream.

`Rand_F_Dist(N, M, Stream)`. F-distribution.
Parameters:

- `N, M` = Degrees of freedom.
- `Stream` = Random number stream.

`Rand_Tri(Min, Max, Mode, Stream)`. Triangular distribution
Parameters:

- `Min, Max, Mode`: Min < Mode < Max.
- `Stream` = Random number stream.

`Rand_Erlang(Mu, K, Stream)`. Erlang variate.
Parameters:

- `Mu` = Mean >= 0.
- `K` = Number of exponential samples.
- `Stream` = Random number stream.

`Rand_Exp(Lambda, Stream)`. Exponential distribution.
Parameters:

- `Lambda` = rate = 1/mean.
- `Stream` = Random number stream.

`Rand_Lognormal(Mu, Sigma, Stream)`. Lognormal distribution.
Parameters:

- `Mu` = Mean.
- `Sigma` = Standard deviation.
- `Stream` = Random number stream.

`Rand_Pareto(Alpha, Stream)`. Pareto distribution.
Parameters:

- `Alpha` = ?
- `Stream` = Random number stream.

`Rand_Weibull(Alpha, Beta, Stream)`. Weibull distribution.
Parameters:

- `Alpha` = ?
- `Beta` = ?
- `Stream` = Random number stream.

##### 3.7.11.2.3 Discrete Distributions

`Rand_Bernoulli(P, Stream)` and `Prob(P, Stream)`. Bernoulli distribution. Output is true with probability equal to the value of P and false with a probability of 1 - P.
Parameters:

- `P` = probability range (0-1).
- `Stream` = Random number stream.

`Rand_Binomial(N, P, Stream)`. Binomial distribution.
Parameters:

- `N` = Number of trials.
- `P` = Probability (0-1)
- `Stream` = Random number stream.

`Rand_Geo(P, Stream)`. Geometric distribution.
Parameters:

- `P` = Probability (0-1).
- `Stream` = Random number stream.

`Rand_Poisson(Mu, Stream)`. Poisson distribution.
Parameters:

- `Mu` = Mean.
- `Stream` = Random number stream.