Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2013, 22:34   #1
Ежик
Пользователь
 
Регистрация: 23.04.2010
Сообщений: 12
Печаль генератор псевдослучайных чисел с указанием диапазона в формате int64

столкнулся с проблемой: необходимо, в программе на делфи, генерировать случайные числа в указанном диапазоне. в формате int64, random не подходит.
может у кого то есть исходник подобного генератора или подскажите с алгоритмом.
пытался взять от сюда ума не хватило
Вложения
Тип файла: zip amrandom2.zip (437.9 Кб, 10 просмотров)
Ежик вне форума Ответить с цитированием
Старый 01.04.2013, 23:00   #2
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Самый простой вариант - генерируйте два 32-битных целых и склейте их в одно 64-битное
Код:

function RndInt64(ARange: int64):int64;
var int1,int2:integer;
begin
   int1:=Random(maxInt*2)-maxInt;
   int2:=Random(maxInt*2)-maxInt;
   result:=((int1 shl 32) or int2) mod ARange;
end;
Если память мне не изменяет

Или даже прямой записью в память
Код:
function RndInt64(ARange: int64):int64;
var int1,int2:integer;
     pinta:PInt;
begin
   int1:=Random(maxInt);
   int2:=Random(maxInt);
   result:=0;
   pinta:=@result;
   pinta^:=int1;
   inc(pinta,1);
   pinta^:=int2;
   result=result mod ARange;
end;
благодарность - сюда (не забываем писать от кого)

Последний раз редактировалось Zer0; 02.04.2013 в 18:39.
Zer0 вне форума Ответить с цитированием
Старый 02.04.2013, 07:55   #3
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Ежик Посмотреть сообщение
столкнулся с проблемой: необходимо, в программе на делфи, генерировать случайные числа в указанном диапазоне. в формате int64, random не подходит.
может у кого то есть исходник подобного генератора или подскажите с алгоритмом.
пытался взять от сюда ума не хватило
1. Непонятно, почему random не подходит.
2. Если действительно не подходит, ищите "конгруэнтный ГПСЧ".
s-andriano вне форума Ответить с цитированием
Старый 02.04.2013, 18:10   #4
Ежик
Пользователь
 
Регистрация: 23.04.2010
Сообщений: 12
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
1. Непонятно, почему random не подходит.
2. Если действительно не подходит, ищите "конгруэнтный ГПСЧ".
Необходимо указывать диапазон случайных чисел, так как randomrange. Проблема в том, что randomrange работает для integer, а у меня числа размером 64 бита.
Ежик вне форума Ответить с цитированием
Старый 03.04.2013, 07:49   #5
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Генерируйте случайное число в пределах от 0 до единицы, а потом умножайте его на randomrange и округляйте.
s-andriano вне форума Ответить с цитированием
Старый 03.04.2013, 17:35   #6
Ежик
Пользователь
 
Регистрация: 23.04.2010
Сообщений: 12
По умолчанию

Спасибо за совет.
Ежик вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генератор псевдослучайных чисел без использования встроеных функций lordik333 C# (си шарп) 1 03.12.2012 20:18
конгруэнтный генератор псевдослучайных чисел cvbcvb Помощь студентам 0 10.05.2010 00:16
генератор псевдослучайных чисел duff Паскаль, Turbo Pascal, PascalABC.NET 18 27.04.2010 23:59
Генератор псевдослучайных чисел Max- Помощь студентам 12 21.05.2009 21:06
генератор псевдослучайных чисел - распределение elsin Общие вопросы Delphi 12 15.05.2008 16:07