Здравствуйте, понимаю что не совсем по теме, но вот показали мне код и спросили, а действительно ли функция Shift_Registr возвращает случайную величину с равномерным распределением?
type
TRegType = array [1..200] of Bool;
//...
// Начальная инициалиция регистра сдвига для дальнейшего
// формирования ПСП
procedure Init_Registr(var reg: TRegType);
var
i: Integer;
begin
Randomize;
Reg[1] := 1;
for i := 2 to 200 do
Reg[i] := Random(2);
end;
// Сдвиг регистра и получение СВ с равномерным распределением
// в интервале (0,1)
function Shift_Registr(m, n: Integer; var reg: TRegType): Real;
var
i: Integer;
r: Real;
b: Bool;
step: Integer;
MaxValue: Longint;
begin
step := 1;
MaxValue := 0;
r := 0;
for i := 1 to m do
begin
r := r + step * Reg[i];
MaxValue := MaxValue + step;
step := step * 2;
end;
r := r / MaxValue;
b := Reg[n] xor Reg[m];
for i := m downto 2 do
Reg[i] := Reg[i - 1];
Reg[1] := b;
Result := r;
end;
Что-либо против сказать не смог, но результаты получаемые с помощью этого кода не совсем адекватные...
03.04.08 17:46: Перенесено модератором из 'Этюды для программистов' — Хитрик Денис