почему NULL из srand (time (NULL)) дает time () случайное значение? - PullRequest
0 голосов
/ 13 апреля 2020

На C языке используйте srand (время (NULL)); может генерировать случайные числа от 0 до 32767. Мой вопрос: почему NULL из srand (time (NULL)) дает time () случайное значение?

Кроме того, как генерировать случайные числа более 32767?

Использование

if (rand ()% 2 == 0) {ans = rand () + (0b1 << 15);}
else {ans = rand ();}

Подходит?

1 Ответ

0 голосов
/ 13 апреля 2020

Относительно "почему NULL of srand (time (NULL)) дает time () случайное значение?"

Проверьте справочную страницу в time() упоминается

time() возвращает время в виде количества секунд с начала эпохи, 1970-01-01 00:00:00 +0000 ( UT C). Если t не равно NULL, возвращаемое значение также сохраняется в памяти, на которую указывает t.

В этом случае нам нужно только возвращаемое значение, и мы не нужно дополнительно хранить это значение в каком-либо буфере, поэтому мы передаем NULL в качестве аргумента. Кроме того, возвращаемое значение равно не случайно , это количество секунд с начала эпохи 1970-01-01. Таким образом, каждый вызов обновляет значение (строго инкрементно).

Тем не менее, в отношении диапазона значений, возвращаемых при вызове rand()

Функция rand() возвращает псевдослучайное целое число в диапазоне от 0 до RAND_MAX включительно (т. Е. В математическом диапазоне [0, RAND_MAX]).

Проверьте значение RAND_MAX в вашей платформе.

Тем не менее, rand() плохой PRNG, вы можете проверить эту ветку , чтобы найти лучший способ получить случайное число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...