Генерация случайных чисел - C на ARM7 - PullRequest
0 голосов
/ 25 марта 2011

Мне нужно сгенерировать случайное число, теперь это число должно быть где-то между 10 и 120 секундами. Теперь в C я мог бы использовать Random для этого, однако у меня нет доступа к этой функции. Чтобы попытаться проявить смекалку, я определил некоторые случайные данные, у меня есть доступ к функции беспроводного сканирования (для которой это случайное число фактически требуется), которая обеспечивает мощность каждого обнаруженного сигнала Wi-Fi.

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

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

Есть мысли? Может быть, есть более простой способ достижения этого? Спасибо за любые советы.

Редактировать: чтобы сделать сообщение читабельным!

Ответы [ 2 ]

2 голосов
/ 25 марта 2011

Примените XOR ко всем уровням сигнала и приведите его к целому числу или к чему угодно.

Альтернативно, это более или менее то, как rand() определено в C:

static unsigned int next = 1;

int rand_r(unsigned int *seed)
{
       *seed = *seed * 1103515245 + 12345;
       return (*seed % ((unsigned int)RAND_MAX + 1));
}

int rand(void)
{
       return (rand_r(&next));
}

void srand(unsigned int seed)
{
       next = seed;
}
0 голосов
/ 26 марта 2011

Стандартная функция библиотеки rand(), а не Random(); почему ты не можешь использовать это? Для всех его потенциальных недостатков он, вероятно, более чем достаточен для таймера отключения, поскольку само время запуска рандомизируется в результате столкновения и асинхронного действия других устройств.

Люди, вероятно, будут лирически отзываться об указанных недостатках этой функции, и еще раз об использовании наивной операции по модулю в ее возвращаемом значении, но речь идет о пригодности для цели и адекватности, и rand () более чем адекватен в этом случай.

...