RosettaCodeData/Task/Linear-congruential-generator/PascalABC.NET/linear-congruential-generator-2.pas
2025-02-27 18:35:13 -05:00

29 lines
610 B
ObjectPascal

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);
foreach var val in iter1.Take(10) do
println(val);
println;
'Microsoft with seed = 0'.Println;
var iter2 := msvcrtRand(0);
foreach var val in iter2.Take(10) do
println(val);
end.