Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


Crazy Noise, saurn,
Цитата saurn:
Меняйте номера эффектов в процедуре и выбирайте, какой вам понравится. »
можно ещё и рандомом ShowImage(piclist.strings[CurrentPicture - 1], Random(12)+1);


Кстати вот имплементация из делфи функции RandG() на основе нормального распределения по Гауссу

Работает она медленнее (особенно в инно), но разброс в диапазоне намного "случайнее". Кому надо забирайте!
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
InfoBeforeFile=compiler:license.txt
DisableWelcomePage=yes



[Code  ]
function Rand(): Extended;
begin
    Result := Random(MAXINT)/MAXINT;
end;

function Sqr(const E: Extended): Extended;
begin
    Result := E*E;
end;

procedure Inc(var Int: Integer);
begin
    Int := Int+1;
end;

function Ln(const X: Extended): Extended;
var
    tek, rez, b: Extended;
    i : Longint;
begin
    rez := 0;
    b := X-1;
    i := 1;
    tek := b;
    while ABS(tek) >= 0.00000001 do
    begin
        rez := rez + tek;
        Inc(i);
        b := -b*(x-1);
        tek := b/i;
    end;
    Result := rez;
end;

//Функция генерирует случайное число с отклонением по Гауссу от среднего значения Mean. Наибольшая часть возвращаемых значений будет лежать в диапазоне Mean-StdDev ... Mean+StdDev.
function RandG(const Mean, StdDev: Extended): Extended;
{ Marsaglia-Bray algorithm }
var
    U1, S2: Extended;
begin
    repeat
        U1 := 2*Rand() - 1;
        S2 := Sqr(U1) + Sqr(2*Rand()-1);
    until S2 < 1;
    Result := Sqrt(-2*Ln(S2)/S2) * U1 * StdDev + Mean;
end;


function RandEx(const Range: Extended): Extended;   //X := RandG(100,10); { 90<=X<=110 }
begin
    
    Result := Abs(RandG(Range/2, Range/2));
    if Result > Range then
    repeat
         Result := Result-1;
    until Result <= Range;
end;



procedure InitializeWizard();
var
    i: Integer;
begin
    WizardForm.InfoBeforeMemo.Clear;
    WizardForm.InfoBeforeMemo.Text := 'RandEx' + #9#9#9 + 'Random';
    Randomize();
    for i := 0 to 20 do WizardForm.InfoBeforeMemo.Text := WizardForm.InfoBeforeMemo.Text + #13#10 + IntToStr(Round(RandEx(12))) + #9#9#9 + IntToStr(Random(12)+1);
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:09, 06-07-2013 | #747