Section: Visualization Toolkit Common Classes
The sequence is generated by a prime modulus multiplicative linear congruential generator (PMMLCG) or "Lehmer generator" with multiplier 16807 and prime modulus 2^(31)-1. The authors calls it "minimal standard random number generator"
ref: "Random Number Generators: Good Ones are Hard to Find," by Stephen K. Park and Keith W. Miller in Communications of the ACM, 31, 10 (Oct. 1988) pp. 1192-1201. Code is at page 1195, "Integer version 2"
Correctness test is described in first column, page 1195: A seed of 1 at step 1 should give a seed of 1043618065 at step 10001.
To create an instance of class vtkMinimalStandardRandomSequence, simply invoke its constructor as follows
obj = vtkMinimalStandardRandomSequence
obj
is an instance of the vtkMinimalStandardRandomSequence class.
string = obj.GetClassName ()
int = obj.IsA (string name)
vtkMinimalStandardRandomSequence = obj.NewInstance ()
vtkMinimalStandardRandomSequence = obj.SafeDownCast (vtkObject o)
obj.SetSeed (int value)
- Set the seed of the random sequence.
The following pre-condition is stated page 1197, second column:
valid_seed: value>=1 && value<=2147483646
2147483646=(2^31)-2
This method does not have this criterium as a pre-condition (ie it will
not fail if an incorrect seed value is passed) but the value is silently
changed to fit in the valid range [1,2147483646].
2147483646 is added to a null or negative value.
2147483647 is changed to be 1 (ie 2147483646 is substracted).
Implementation note: it also performs 3 calls to Next() to avoid the
bad property that the first random number is proportional to the seed
value.
obj.SetSeedOnly (int value)
- Set the seed of the random sequence. There is no extra internal
ajustment. Only useful for writing correctness test.
The following pre-condition is stated page 1197, second column
2147483646=(2^31)-2
This method does not have this criterium as a pre-condition (ie it will
not fail if an incorrect seed value is passed) but the value is silently
changed to fit in the valid range [1,2147483646].
2147483646 is added to a null or negative value.
2147483647 is changed to be 1 (ie 2147483646 is substracted).
int = obj.GetSeed ()
- Get the seed of the random sequence.
Only useful for writing correctness test.
double = obj.GetValue ()
- Current value
\post unit_range: result>=0.0 && result<=1.0
obj.Next ()
- Move to the next number in the random sequence.
double = obj.GetRangeValue (double rangeMin, double rangeMax)
- Convenient method to return a value in a specific range from the
range [0,1. There is an initial implementation that can be overridden
by a subclass.
There is no pre-condition on the range:
- it can be in increasing order: rangeMin<rangeMax
- it can be empty: rangeMin=rangeMax
- it can be in decreasing order: rangeMin>rangeMax
\post result_in_range:
(rangeMin<=rangeMax && result>=rangeMin && result<=rangeMax)
|| (rangeMax<=rangeMin && result>=rangeMax && result<=rangeMin)