Random Numbers¶
Simba provides various methods to generate random numbers with different distributions.
The following methods are:
Random:¶
Random generates approximately uniform distribution.
function Random: Double; overload;
function Random(l: Int64): Int64; overload;
function Random(min, max: Double): Double; overload;
function Random(min, max: Int64): Int64; overload;
RandomLeft:¶
RandomLeft generates weighted numbers towards Lo
function RandomLeft(Lo, Hi: Double): Double; overload;
function RandomLeft(Lo, Hi: Int64): Int64; overload;
RandomRight:¶
RandomRight generates weighted numbers towards Hi
function RandomRight(Lo, Hi: Double): Double; overload;
function RandomRight(Lo, Hi: Int64): Int64; overload;
RandomMean:¶
RandomMean generates weighted numbers towards the mean of Lo..Hi
function RandomMean(Lo, Hi: Double): Double; overload;
function RandomMean(Lo, Hi: Int64): Int64; overload;
RandomMode:¶
RandomMode generates weighted numbers towards Mode
within Lo..Hi
function RandomMode(Mode, Lo, Hi: Double): Double; overload;
function RandomMode(Mode, Lo, Hi: Int64): Int64; overload;
You can also write a small script to show the spread.
This shows the spread of 1000000 calls of
RandomLeft(0, 10)
:const
SampleCount = 1000000;
Range = 10;
var
Hits: TIntegerArray;
I: Integer;
begin
SetLength(Hits, Range);
for I := 1 to SampleCount do
Hits[RandomLeft(0, Range)] += 1;
for I := 0 to High(Hits) do
WriteLn(I, ' was rolled ', Hits[I], ' times (', Round((Hits[I] / SampleCount) * 100, 4), ' percent)');
end;
Output
0 was rolled 382874 times (38.2874 percent)
1 was rolled 300305 times (30.0305 percent)
2 was rolled 183102 times (18.3102 percent)
3 was rolled 88345 times (8.8345 percent)
4 was rolled 32958 times (3.2958 percent)
5 was rolled 9715 times (0.9715 percent)
6 was rolled 2195 times (0.2195 percent)
7 was rolled 442 times (0.0442 percent)
8 was rolled 60 times (0.006 percent)
9 was rolled 4 times (0.0004 percent)