2024-10-16 18:07:41 -07:00
|
|
|
function bsdRand(seed: integer): sequence of integer;
|
|
|
|
|
begin
|
|
|
|
|
while true do
|
|
|
|
|
begin
|
|
|
|
|
seed := (1_103_515_245 * seed + 12_345) and $7fffffff;
|
|
|
|
|
yield seed
|
|
|
|
|
end;
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function msvcrtRand(seed: integer): sequence of integer;
|
|
|
|
|
begin
|
|
|
|
|
while true do
|
|
|
|
|
begin
|
|
|
|
|
seed := (214_013 * seed + 2_531_011) and $7fffffff;
|
|
|
|
|
yield seed shr 16
|
|
|
|
|
end;
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
begin
|
|
|
|
|
'BSD with seed = 1'.println;
|
|
|
|
|
var iter1 := bsdRand(1);
|
2025-02-27 18:35:13 -05:00
|
|
|
foreach var val in iter1.Take(10) do
|
2024-10-16 18:07:41 -07:00
|
|
|
println(val);
|
|
|
|
|
println;
|
|
|
|
|
'Microsoft with seed = 0'.Println;
|
|
|
|
|
var iter2 := msvcrtRand(0);
|
2025-02-27 18:35:13 -05:00
|
|
|
foreach var val in iter2.Take(10) do
|
2024-10-16 18:07:41 -07:00
|
|
|
println(val);
|
|
|
|
|
end.
|