Мне было интересно, какой лучший способ получить уникальное случайное число каждый час в C было. У меня есть целые числа часа, месяца, дня месяца и дня недели и хочу получать случайное число от 0 до 8 в час. Первоначально я пробовал делать (hour* month* day_month*week_month)%8
, но я думаю, что он часто повторяет определенные числа. Будет ли лучший способ сделать это?Получайте уникальное случайное число каждый час
ответ
Один простой способ будет сделать что-то вроде следующего:
int hourly_random()
{
srand(time(NULL)/3600);
return rand() % 8;
}
Просто множительной неслучайные целые числа, не даст вам что-то случайное. Чтобы проиллюстрировать некоторые из многих проблем: если одно из значений равно 0, результат будет равен 0. Если вы поменяете значение двух входных переменных, результат останется прежним.
Это также имеет место, если вы используете этот результат в качестве семени для случайного генератора. Поскольку семя имеет определенный шаблон, полученные случайные числа будут следовать одному и тому же шаблону.
Если вы хотите использовать указанные вами переменные, вы должны объединить их так, чтобы они не «мешали» друг другу. Очевидным способом является умножение подстрок на максимальное значение, которое вы добавляете. То есть, что-то вроде hours + 24*(months + 12*(...))
.
При создании собственного способа генерации случайных чисел, возможно, вам стоит посмотреть, как работают генераторы случайных чисел. Тем не менее, в общем, вы действительно не хотите, чтобы это делалось сами из-за всех ловушек. Вероятно, лучше полагаться на работу, которая уже была сделана раньше.
Чтобы не переваривать генератор случайных чисел каждый раз, вы можете просто отслеживать, когда последний вызов был выполнен. Если бы это было в тот же час, верните одно и то же значение, в противном случае получите новое случайное значение.
int hourly_random()
{
static time_t last = 0;
static int rand_val = 0;
time_t current;
current = time(NULL);
if (!last) {
srand(current+getpid());
}
if ((current/3600) > (last/3600)) {
last = current;
rand_val = rand() % 8;
}
return rand_val;
}
- 1. PostgreSQL: генерировать случайное число каждый час
- 2. Получайте уникальное случайное слово из пула каждый день
- 3. C# уникальное случайное число
- 4. Как получить уникальное случайное число?
- 5. Получайте новое случайное число каждый день в JS или jquery
- 6. Как создать уникальное случайное число?
- 7. Выберите уникальное случайное число из массива
- 8. действительно уникальное случайное число, генерируемое php?
- 9. PHP MySQL генерирует уникальное случайное число
- 10. Уникальное случайное число для каждого экземпляра класса
- 11. Уникальное случайное число для определенной отметки времени
- 12. Уникальное 4-значное случайное число в C#
- 13. Generete уникальное случайное число в большом количестве
- 14. Случайное число каждый раз/каждый день
- 15. Рубин - случайное число то же случайное число, каждый раз
- 16. Генерировать случайное число, которое меняется каждый месяц
- 17. случайное число разный выход каждый раз
- 18. Jmeter: Случайное число меток каждый день
- 19. Произвольное случайное число, которое различно каждый раз
- 20. Случайное число каждый раз на контуре javascript
- 21. Как генерировать случайное число каждый раз
- 22. Уникальное случайное число в каждом экземпляре оно называется
- 23. Laravel мутатор, который создает уникальное случайное число не работает
- 24. Как создать случайное и уникальное целое число в поле sql?
- 25. Сформировать уникальное случайное число в диапазоне от 0 до 1000
- 26. Как создать уникальное случайное число, отсутствующее в списке?
- 27. Grails: как создать удобное для человека уникальное случайное число
- 28. Создать уникальное случайное число «n» в пределах диапазона
- 29. Как сгенерировать * уникальное * случайное число в Go, используя стандартную библиотеку
- 30. Создайте уникальное случайное число для каждого значения массива
Добавить это до: srand (время (NULL)); – FreeStyle4
Есть ли причина, по которой вы не можете просто использовать стандартный криптографически безопасный RNG? –
Неужели вы не надежно * случайны или просто кажутся случайными? –