HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Random numbers generator
Кто-нибудь исследовал вопрос?
Страницы (4): « 1 2 [3] 4 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Crystallize
Житель форума

Дата регистрации: Jul 2007
Проживает: Новосибирск
Сообщений: 4424
Возраст: 34

Рейтинг



http://qrng.anu.edu.au

Сообщить модератору | | IP: Записан
Сообщение: 131208

Старое сообщение 20-01-2014 13:00
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34529
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


В общем, я сконструировал свой конгруэнтный генератор на основе мултипликативного и AWC-генератора. Он немного быстрее и немного чотче хл2шного, а главное - никаких копирайтов, можно вешать свой. Шутко. На самом деле главное - это период. У бетковского он 2^32, а у меня 2^32*2^58=2^90. Серии должны быть гораздо длиннее. Осталось его как следует потестить. И я не совсем уверен в правильности выбора стартовых семечек, возможно, этот момент можно сделать лучше.
Если кому интересно - могу выложить с пояснениями.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 131209

Старое сообщение 20-01-2014 13:09
-
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



Награды
 
[1 награда]


Цитата:
XaeroX писал:
Если кому интересно - могу выложить с пояснениями.


Интересно, выкладывай. Я раньше интересовался генерацией псевдослучайных чисел.

Сообщить модератору | | IP: Записан
Сообщение: 131211

Старое сообщение 20-01-2014 14:01
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34529
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
Government-Man писал:
Я раньше интересовался генерацией псевдослучайных чисел.

А чего перестал?

Добавлено 20-01-2014 в 21:17:

Government-Man
А у тебя статьи случаем нет, что я в первом посте упомянул? Раз интересовался, то наверняка же читал что-то по теме?

__________________

Сообщить модератору | | IP: Записан
Сообщение: 131212

Старое сообщение 20-01-2014 14:17
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



XaeroX он предиктабельный у тебя? seed поддерживает?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 131214

Старое сообщение 20-01-2014 14:58
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34529
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
он предиктабельный у тебя?

Что ты понимаешь под "предиктабельным"?
Цитата:
Дядя Миша писал:
seed поддерживает?

Ему три сида надо, я их делаю из одного (time(NULL)) путём прогона через вариант мультипликативного генератора, и вот не совсем уверен, нормально ли это. Впрочем, сиды мало на что влияют, распределение всегда вполне равномерное.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 131216

Старое сообщение 20-01-2014 15:12
-
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



Награды
 
[1 награда]


Цитата:
XaeroX писал:
А чего перестал?


Я не перестал, просто в свое время читал какие-то статьи по теме, но в итоге решил не заморачиваться и свою имплементацию пока не писать, а просто поставил заглушку с rand() - для игрушек хватает, для более серьезных проектов придется переписывать конечно.

Цитата:
XaeroX писал:
А у тебя статьи случаем нет, что я в первом посте упомянул? Раз интересовался, то наверняка же читал что-то по теме?


Читал да, но искомой статьи не припомню. У меня были какие-то статьи в PDF, надо бы глянуть. Ну я Кнута еще читал, но там как-раз про ЛКМ.

Сообщить модератору | | IP: Записан
Сообщение: 131217

Старое сообщение 20-01-2014 15:39
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34529
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Ну что ж, вот мой генератор

C++ Source Code:
1
// Random generator, author: XaeroX, 2014
2
// Part of Volatile3D II Engine source code
3
// Code license:
4
// Creative Commons Attribution-Noncommercial-Share Alike
5
// http://creativecommons.org/licenses/by-nc-sa/4.0/
6
 
7
// could be local statics, but we reference them
8
// in two subroutines: srand and rand
9
// the initial values are arbitrary unsigned ints
10
static unsigned int awc0 = 0xf6a3d9;
11
static unsigned int awc1 = 0x159a55e5;
12
static unsigned int mult = 0x436cbae9;
13
static unsigned int carry = 1;
14
 
15
void xrxSRand( unsigned int seed )
16
{
17
  // default seed comes from system timers
18
    if ( !seed ) seed = ( unsigned int )time( NULL );
19
 
20
  // initialize AWC and multiplicative seeds
21
  awc0 = 0x10dcd * seed + 0xf6a3d9;
22
  awc1 = 0x10dcd * seed + 0x159a55e5;
23
  mult = seed & 0x7fffffff;
24
 
25
  // carry flag initial value depends on awc seeds
26
  carry = ( awc0 > awc1 ) ? 0 : 1;
27
}
28
 
29
unsigned int xrxRand( void )
30
{
31
  // run AWC-generator
32
  unsigned int awc = awc1 + ( awc0 + carry );
33
  carry = ( awc > awc0 ) ? 0 : 1;
34
  awc1 = awc0; awc0 = awc;
35
 
36
  // run multiplicative generator
37
  mult = 0x10dcd * mult + 0x3c6ef373;
38
 
39
  // return random value
40
  return awc + mult;
41
}
42
 
43
int Com_RandomLong( int low, int high )
44
{
45
  static bool init = false;
46
  unsigned int randNumber;
47
  unsigned int randRange = high - low + 1;
48
 
49
  assert( high >= low );
50
 
51
  if ( randRange <= 1 )
52
    return low;
53
 
54
  if ( !init ) {
55
    xrxSRand( 0 );
56
    init = true;
57
  }
58
 
59
  // remapping to desired range keeping random value uniformly distributed
60
  unsigned int maxAcceptable = 0xfffffffe - ( 0xffffffff % randRange );
61
  do randNumber = xrxRand(); while ( randNumber > maxAcceptable );
62
 
63
  return low + ( randNumber % randRange );
64
}
65
 
66
float Com_RandomFloat( float low, float high )
67
{
68
  static bool init = false;
69
  float randNumber;
70
  float randRange = high - low;
71
 
72
  assert( high >= low );
73
 
74
  if ( randRange <= 0 )
75
    return low;
76
 
77
  if ( !init ) {
78
    xrxSRand( 0 );
79
    init = true;
80
  }
81
 
82
  randNumber = 0.2328306437e-9f * xrxRand();
83
  return low + randNumber * randRange;
84
}


Из комментариев должно быть понятно, что и как работает.
Этот генератор примерно на 7% быстрее хл2шного (мелочи, ок) и более чем в 2 раза быстрее CRT-шного rand().
Но код, полагаю, намного понятнее и читабельнее.
Если что, задавайте вопросы. Если что-то не работает, или заметили косяк/опечатку - сообщайте.
Извиняюсь за анальную лицензию, но мало ли кто этот код нагуглит... время нынче непростое.
Потом, когда волатила станет GPL, этот код тоже будет GPL, а пока вот так.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 131218

Старое сообщение 20-01-2014 16:51
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
XaeroX писал:
Что ты понимаешь под "предиктабельным"?

Очень просто, при одинаковом заданном диапазоне и совпадающем сиде всегда будет генерироваться одно и то же псевдослучайное число.
Для чего это нужно ты и сам знаешь - предиктинг випонсов, травку расставлять, да мало ли. Точнее тут смысл в том даже, что не просто одинаковое случайное число. Одна и та же последовательность случайных чисел. Это важнейшее свойство любого генератора такого типа.
Цитата:
XaeroX писал:
Ну что ж, вот мой генератор

А RandomFloat?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 131219

Старое сообщение 20-01-2014 17:21
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34529
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
Очень просто, при одинаковом заданном диапазоне и совпадающем сиде всегда будет генерироваться одно и то же псевдослучайное число.

Ну это само собой.
Цитата:
Дядя Миша писал:
Для чего это нужно ты и сам знаешь

Знаю, в волатиле юзается предиктабельный рандом.
Я просто подумал, что это какой-то математический термин.
Цитата:
Дядя Миша писал:
А RandomFloat?

Пока не написал.
Позже будет. Он всё равно основывается на этой же функции.

Добавлено 21-01-2014 в 02:01:

Ага, дописал RandomFloat, обновил пост.
Она, кстати, немного медленнее, чем хл2шная (примерно на те же 7%, причём загадка, из-за чего, видимо, компилятор чудит при генерации кода), но всё равно быстрее rand().

__________________

Сообщить модератору | | IP: Записан
Сообщение: 131224

Старое сообщение 20-01-2014 19:01
-
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



Награды
 
[1 награда]


Кстати в C++11 появилась отличная библиотека <random> с кучей алгоритмов и распределений (и возможностью подключать свои), собственно там весьма винрарный вихрь мерсенна идет из коробки.

Производительность только надо б замерить, но мне чет лень.

Сообщить модератору | | IP: Записан
Сообщение: 136440

Старое сообщение 17-04-2014 10:14
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34529
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
Government-Man писал:
C++11

Его кто-то использует?

__________________

Сообщить модератору | | IP: Записан
Сообщение: 136441

Старое сообщение 17-04-2014 10:27
-
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



Награды
 
[1 награда]


Цитата:
XaeroX писал:
Его кто-то использует?


А то!

Сообщить модератору | | IP: Записан
Сообщение: 136442

Старое сообщение 17-04-2014 10:34
- За что?
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



Извиняюсь за поднятие старой темы. А как сослаться на http://hlfx.ru/forum/showthread.php...1218#post131218 если я хочу использовать эту имплементацию?

__________________
http://www.moddb.com/mods/monorail-quest

Сообщить модератору | | IP: Записан
Сообщение: 155217

Старое сообщение 26-05-2016 21:12
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34529
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


thambs
В исходниках - можешь прям эту ссылку в комментариях и разместить.
В статье - ссылайся на оригинальные работы. Моя реализация, по сути, на основе их идей.

Цитата:
Press, W. H. and S. A. Teukolsky (1992). "Portable Random Number Generators." Comput. Phys. 6(5): 522-524.
Marsaglia, G. and A. Zaman (1994). "Some portable very-long-period random number generators." Comput. Phys. 8(1): 117-121.

Могу дать pdf-ки, если нужно.

Сообщить модератору | | IP: Записан
Сообщение: 155220

Старое сообщение 27-05-2016 04:31
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 00:01. Новая тема    Ответить
Страницы (4): « 1 2 [3] 4 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Random numbers generator
Кто-нибудь исследовал вопрос?
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024