Извлечение, скажем, что последний бит случайного числа может нанести ущерб, так как линейные конгруэнтные генераторы могут чередовать нечетные и четные числа 1 .Схема типа clock() & 1
также будет иметь ужасные корреляционные равнины.
Рассмотрим решение, основанное на быстром и грязном генераторе Дональда Кунта: для uint32_t I
, последовательность
I = 1664525 * I + 1013904223;
и 2 * I < I
- это условный булевый рисунок.Здесь я полагаюсь на циклическое поведение I
, которое должно происходить половину времени, и избегается потенциально дорогостоящее деление.
Тестирование I <= 0x7FFFFFFF
менее броское и может быть еще быстрее, ножесткое кодирование средней точки не совсем удовлетворительно.
1 Генератор, который я здесь представляю, делает.