As demonstrated by Paul Groot at
http://groups.google.com/group/e-prime/browse_thread/thread/ccda3fe57a595c54
, both sets of functions *do* use the same underlying pseudo-random
number generator (but you should still test that out for yourself!),
and provide equivalent results. So what's the point? Well, the
standard VBA set does have a confusing interface. I posit that
E-Basic provides the PRNG object simply to gather all these functions
into one tidy E-Object, and along the way provides one extra function
lacking from the standard set. E-Basic still includes the standard
set for those VBA programmers who prefer it, as well as to allow
legacy code to work.
Some further notes (in the following, x indicates an arbitrary
number, +x a number greater than 0, -x a number less than 0):
- PRNG.GetSeed
has no equivalent in the standard VBA set.
- PRNG.SetSeed x
does the same as
Randomize x
(note that "Randomize" without an argument uses the system clock
for the seed; PRNG has no simple equivalent to this --
"PRNG.SetSeed" without an argument sets the seed to 1).
- PRNG.Reset
is a synonym for
PRNG.SetSeed 0
or
Randomize 0
- PRNG.GetNext
does the same as
Rnd(+x)
- PRNG.GetPrev
does the same as
Rnd(0)
i.e., they simply repeat the value of the latest random number
generated (e.g., from the latest use of PRNG.GetNext or Rnd(+x)).
(Note also that after PRNG.Random() or Random() it returns the
full double value, not the truncated long integer value.)
- PRNG.Random(min,max)
does the same as
Random(min,max)
0 <= min < max, or they produce the run time error "Invalid Range
Specified".
- Rnd(-x)
returns the same as
Randomize Abs(x) ' (same x as above)
Rnd(+y)
which in turn does the same as
PRNG.SetSeed Abs(x)
PRNG.GetNext
So which should you use? That comes down to your personal
programming taste or style: Would you rather use well-known standard
VBA statements & functions, or keep things organized as methods from
one E-Object? Whichever you choose, you might help others by
explaining your choice with comments in your program.
-- David McFarlane, Professional Faultfinder