<-- Previous || Up || Next -->

Random Integer Within Exp Range Function
Random Values Class

Public Function RandomIntegerWithinExpRange( _
      Optional ByVal vLower As Variant _
    , Optional ByVal vUpper As Variant _
    , Optional ByVal vBase As Variant _
    ) As Variant

"Random Integer Within Exponential Range"
Returns a random Integer number between vLower and vUpper inclusive.
The randoms are generated with a frequency comparable to the area under an exponential curve, except that more numbers are generated near the bottom of the range instead of near the top of it.

Summary: The function first tries to generate a random number using the definition below. If that calculation causes an Overflow or other type of error, the function will repeat it up to 32 times. Function returns Null if it still cannot generate a random number after 32 attempts.
Examples:
    Rnd(-1) = 0.224007
    RandomIntegerWithinExpRange(1, 64, 2) = 1
    RandomIntegerWithinExpRange(1, 64, 2) = 1
    RandomIntegerWithinExpRange(1, 64, 2) = 2
    RandomIntegerWithinExpRange(1, 1000, 3) = 6
    RandomIntegerWithinExpRange(1, 1000, 3) = 189
    RandomIntegerWithinExpRange(1, 1000, 3) = 134
Note: The call to the Visual Basic Rnd function in the above example seeds the Visual Basic random number generator so that the sample results can be reproduced. There is generally no need to call the Rnd function within your programs since Entisoft Tools initializes the Visual Basic random number generator once with "Randomize" statement.
See also:
    RandomIntegerWithinRange Function
    RandomLongWithinExpRange Function
    RandomDoubleWithinExpRange Function
    RandomIntegerWithinExpRangeTest Subroutine
vLower: The lower limit of the range in which the generated random number will fall. vLower defaults to MinInteger if it is missing or Null or cannot be fixed up to a number.

vUpper: The upper limit of the range in which the generated random number will fall. vUpper defaults to MaxInteger if it is missing or Null or cannot be fixed up to a number.

Function returns Null if vLower > (is greater than) vUpper.

Function returns vLower if vLower = (equals) vUpper.

vBase: See the definition below. vBase defaults to 1 (one) if it is missing or Null or cannot be fixed up to a number. With a vBase of 1 (one), this is the same as calling the RandomIntegerWithinRange function.

Definition:

    CInt(Int((Rnd * (1 + vUpper - vLower) ^ (1 / vBase)) ^ vBase + vLower))

Copyright 1996-1999 Entisoft
Entisoft Tools is a trademark of Entisoft.