Генерирование псевдослучайных чисел с равномерным законом распределение

Подскажите, пожалуйста, как сгенерировать 100 чисел с равномерным законом распределения?

Делаю так, но в результате получаю нормальный закон распределения
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .delphi.geshi_code {font-family:monospace;} .delphi.geshi_code .imp {font-weight: bold; color: red;} .delphi.geshi_code .kw1 {color: #000000; font-weight: bold;} .delphi.geshi_code .kw2 {color: #000000; font-weight: bold;} .delphi.geshi_code .kw3 {color: #000066;} .delphi.geshi_code .kw4 {color: #000066; font-weight: bold;} .delphi.geshi_code .co1 {color: #808080; font-style: italic;} .delphi.geshi_code .co2 {color: #008000; font-style: italic;} .delphi.geshi_code .coMULTI {color: #808080; font-style: italic;} .delphi.geshi_code .es0 {color: #ff0000; font-weight: bold;} .delphi.geshi_code .br0 {color: #000066;} .delphi.geshi_code .sy0 {color: #000066;} .delphi.geshi_code .sy1 {color: #000066;} .delphi.geshi_code .sy2 {color: #000066;} .delphi.geshi_code .sy3 {color: #000066;} .delphi.geshi_code .st0 {color: #ff0000;} .delphi.geshi_code .nu0 {color: #0000ff;} .delphi.geshi_code .me1 {color: #006600;} .delphi.geshi_code .re0 {color: #9ac;} .delphi.geshi_code .re1 {color: #ff0000;} .delphi.geshi_code span.xtra { display:block; }


function f(x:extended):real;
begin
    Result := 1/100;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 x       : tarray;
 i,j       : integer;
 rand,sum  : real;
 file_txt     : textfile;
 begin
 
   AssignFile(file_txt,'gen.txt');
   rewrite(file_txt);

  //интервалы и вероятность попадания в них
   for i:=1 to 100 do
    begin
      x[i] := f( i );
      //Writeln(file_txt,FloatToStr( x[i] ));
    end;
//    Writeln(file_txt, ' Конец ');


   For i:=1 to 100 do
   begin
     rand:=random;
     sum:=0;
     j:=0;

     //ищем в какой интервал попало
     repeat
       inc(j);
       sum:= sum + x[j];
//       Writeln( file_txt, IntToStr( i ) + ' = ' + IntToStr( j ) + ' -- ' + FloatToStr( sum ) + ' / ' + FloatToStr( rand ) );
     Until (sum > rand);
     //нашли
     Writeln( file_txt, FloatToStr( rand + (j-1) ));
   end;
   CloseFile(file_txt);
   ShowMessage('Готово!');
    Application.Terminate;
end;
 

1 ответов



Вот эта строка выглядит подозрительно:


Writeln( file_txt, FloatToStr( random + (j-1) ));
 
Вы что тут хотите напечатать? Я вижу, что тут заново получается случайное число (ничего общего печатаемое значение с полученным ранее не имеет) и к нему добавляется номер интервала. Что то тут явно не так :)
Остальной код выглядит более менее нормально.