Очень, очень низкий. Формат GUID включает в себя несколько битов, идентифицирующих схему. Если вы сами «сгенерируете» их, схема GUID, скорее всего, будет неправильной.
В другом потоке упоминался генератор 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 он начинает генерировать слишком мало или слишком много сингулярных матриц (я забыл, какие именно). Было показано, что этот генератор эквивалентен регистру обратной связи с линейным сдвигом. Но если вы не занимаетесь криптографией или серьезной работой в Монте-Карло, этот генератор потрясающий.
Mersenne Twister имеет несколько быстрых реализаций.
rand () чертовски быстро, и я не думаю, что вы найдете намного быстрее.
Если это на самом деле замедляет вашу работу (в чем я немного сомневаюсь), тогда вам нужно изменить архитектуру.
Я рекомендую предварительно заполнить длинный список случайными числами , а затем, когда он вам понадобится, просто возьмите один из списка, а не создавать его.Вы можете повторно заполнить список фоновой цепочкой.
См. эти генераторы от эксперта по генераторам случайных чисел Джорджа Марсалья. Они реализованы как макросы C и работают молниеносно, всего несколько операций на генерируемое число.
Можете ли вы заранее сгенерировать группу случайных битов и отсечь их по 2 за раз (поскольку вам нужно только случайное число от 1 до 3)?
В библиотеке Boost есть набор случайных генераторов. График производительности можно найти здесь .
РЕДАКТИРОВАТЬ: Этот ответ был здесь перед редактированием исходного вопроса. Но я надеюсь, что он все еще может быть полезен, поэтому оставляю его здесь.