Помогите понять равномерное ли это распределение
От: aleckstein Россия  
Дата: 01.04.08 20:59
Оценка:
Здравствуйте, понимаю что не совсем по теме, но вот показали мне код и спросили, а действительно ли функция 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: Перенесено модератором из 'Этюды для программистов' — Хитрик Денис
acta non est fabula — представление не окончено
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.