Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как задать диапазон для Random?


Страницы:   1 2

Zvr@b ©   (2004-07-08 02:14:00) 

Как задать диапазон чисел для функции Random? Т.е. мне нужно не от 0 до N, а например от 1 до N


han_malign   (2004-07-08 13:44:00) [1]

procedure       _RandInt;
asm
{     ->EAX     Range   }
{     <-EAX     Result  }
       PUSH    EBX
{$IFDEF PIC}
        PUSH    EAX
       CALL    GetGOT
       MOV     EBX,EAX
        POP     EAX
       MOV     ECX,[EBX].OFFSET RandSeed
       IMUL    EDX,[ECX],08088405H
       INC     EDX
       MOV     [ECX],EDX
{$ELSE}
       XOR     EBX, EBX
       IMUL    EDX,[EBX].RandSeed,08088405H
       INC     EDX
       MOV     [EBX].RandSeed,EDX
{$ENDIF}
        MUL     EDX
       MOV     EAX,EDX

       POP     EBX
end;

- Max(Random(N))=N*$FFFFFFFF shr 32{div $100000000}<N

//Random(N1..N2)=Random(N2-N1+1)+N1
можно Trunc(Random*(N2-N1+1))+N1 или Round(Random*(N2-N1))+N1, но тогда N2, теоретически, может выпадать с незначительно меньшей вероятностью, так как для дискретных вещественных чисел теорема о полноте континиума не вполняется - хотя это нужно прикинуть поточнее...


BillyJeans   (2004-07-08 13:19:00) [2]

От 2 до N - x := random(N-2) + 2; !!!


MBo   (2004-07-08 13:13:00) [3]

Кошмар...


Программатор   (2004-07-08 13:06:00) [4]

x := random(n-1) + 1


КаПиБаРа   (2004-07-08 12:53:00) [5]


> От 2 до N - x := random(n-1) + 2; ИМХО


неа


Глеб   (2004-07-08 11:32:00) [6]


> Как задать диапазон чисел для функции Random? Т.е. мне нужно
> не от 0 до N, а например от 1 до N

От 1 до N - x := random(n) + 1;
От 2 до N - x := random(n-1) + 2; ИМХО


Anatoly Podgoretsky   (2004-07-08 11:16:00) [7]

Для целых чисел лучше подходить с такой позиции - N это количество чисел в интревале. Интервал начинается с нуля.
Реальная формула такова Random(N) + Offset
Смещение 9 естественно в записи опускается.
Это как на линейке, 10 сантиметров всегда 10 сантиметров, независимо от начальной точке на этой линейке.


КаПиБаРа   (2004-07-08 10:59:00) [8]

Ну если речь идет о целых числах то все в порядке.

Хотя определение из хелп справедливо для любых чисел.


TopT   (2004-07-08 10:35:00) [9]

КаПиБаРа, что же не верно?  В приведенной вами цитате из хелпа написано  "X < Range" не меньше равно, а именно меньше. Речь идет о целых числах и соответственно максимальное значение Х это Range-1


ssk   (2004-07-08 10:11:00) [10]

по сабжу

uses Math;

RandomRange()


КаПиБаРа   (2004-07-08 08:27:00) [11]


> Результатом работы функции random(n) есть число в пределах
> [0, n-1]  !

Не совсем верно.
Random returns a random number within the range 0 <= X < Range


Alex_Rom   (2004-07-08 03:03:00) [12]


> Zvr@b   (08.07.04 03:01) [23]

ДА, трафик неплохо поднял :)
Ну, я так полагаю, что теперь вопрос исчерпан, а тема закрыта.


Zvr@b   (2004-07-08 03:01:00) [13]

Вот видете какой вопрос я задал! )))


Alex_Rom   (2004-07-08 02:58:00) [14]


> KilkennyCat ©   (08.07.04 02:56) [21]


Согласен. У меня такое тоже случалось.. :)


KilkennyCat   (2004-07-08 02:56:00) [15]


> Alex_Rom   (08.07.04 02:54) [20]


Во всем виноват Борланд :) Левую границу включили, а правую не стали :) Блин, из-за таких мелочей потом баги месяц ловишь...


Alex_Rom   (2004-07-08 02:54:00) [16]


> KilkennyCat ©   (08.07.04 02:53) [18]

> Да, старею... Еще раз приношу извинения.


Вот, вот....  :)


KilkennyCat   (2004-07-08 02:53:00) [17]


> Alex_Rom   (08.07.04 02:49) [15]


Да, старею... Еще раз приношу извинения.


Alex_Rom   (2004-07-08 02:53:00) [18]


> Zvr@b   (08.07.04 02:49) [16]


> Как я понял:
> n:=n-1;
> a:=Random(n)+1;
>
> Да или нет?


Нет.
Если ты хочешь получить результат в пределах [1,N], то просто пишешь как я написал сначала:
a:=Random(n)+1


KilkennyCat   (2004-07-08 02:51:00) [19]

> Alex_Rom  

Стоп, прошу прощения. Если квадратные скобки читать как включительното верно.


Zvr@b   (2004-07-08 02:49:00) [20]

Как я понял:
n:=n-1;
a:=Random(n)+1;

Да или нет?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо