Нужен быстрый случайный генератор для [закрытого] C++

Очень, очень низкий. Формат GUID включает в себя несколько битов, идентифицирующих схему. Если вы сами «сгенерируете» их, схема GUID, скорее всего, будет неправильной.

44
задан Martin Andersson 28 October 2009 в 21:43
поделиться

6 ответов

В другом потоке упоминался генератор xorshf Marsaglia, но никто не опубликовал код.

static unsigned long x=123456789, y=362436069, z=521288629;

unsigned long xorshf96(void) {          //period 2^96-1
unsigned long t;
    x ^= x << 16;
    x ^= x >> 5;
    x ^= x << 1;

   t = x;
   x = y;
   y = z;
   z = t ^ x ^ y;

  return z;
}

Я использовал его повсюду. Единственное, где это не удалось, - это когда я пытался создать случайные двоичные матрицы. После матриц 95x95 он начинает генерировать слишком мало или слишком много сингулярных матриц (я забыл, какие именно). Было показано, что этот генератор эквивалентен регистру обратной связи с линейным сдвигом. Но если вы не занимаетесь криптографией или серьезной работой в Монте-Карло, этот генератор потрясающий.

62
ответ дан 26 November 2019 в 21:47
поделиться

Mersenne Twister имеет несколько быстрых реализаций.

6
ответ дан 26 November 2019 в 21:47
поделиться

rand () чертовски быстро, и я не думаю, что вы найдете намного быстрее.

Если это на самом деле замедляет вашу работу (в чем я немного сомневаюсь), тогда вам нужно изменить архитектуру.

Я рекомендую предварительно заполнить длинный список случайными числами , а затем, когда он вам понадобится, просто возьмите один из списка, а не создавать его.Вы можете повторно заполнить список фоновой цепочкой.

1
ответ дан 26 November 2019 в 21:47
поделиться

См. эти генераторы от эксперта по генераторам случайных чисел Джорджа Марсалья. Они реализованы как макросы C и работают молниеносно, всего несколько операций на генерируемое число.

12
ответ дан 26 November 2019 в 21:47
поделиться

Можете ли вы заранее сгенерировать группу случайных битов и отсечь их по 2 за раз (поскольку вам нужно только случайное число от 1 до 3)?

0
ответ дан 26 November 2019 в 21:47
поделиться

В библиотеке Boost есть набор случайных генераторов. График производительности можно найти здесь .

РЕДАКТИРОВАТЬ: Этот ответ был здесь перед редактированием исходного вопроса. Но я надеюсь, что он все еще может быть полезен, поэтому оставляю его здесь.

1
ответ дан 26 November 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: