![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как задать диапазон для Random?
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;
Да или нет?