2013-08-25 2 views
6

У меня есть 2 запросов на рандов использования() функции в C++:Запрос на функцию RAND() в C++

  1. Где функция рандов() определены? Я написал простую программу для cout<<rand()<<endl; в цикле, и я не включил заголовочный файл кроме <iostream> .. Как это работает? В ссылочных примерах I натолкнулся на несколько сайтов, некоторые сказали, что вам нужно включить <stdlib.h>, другие сказали: <time.h> .. Так интересно, как работает моя программа. Все идеи?
  2. Я слышал, прежде чем использовать «rand()», нужно инициализировать, предоставив семя для srand, и обычно семя является текущим временем unix ->srand(time(NULL)) .. Но опять же, я не делал этого в своей простой программе, просто был cout<<rand()<<endl; в цикле while, и он отображал случайные числа. Так что вопрос: srand(time(NULL)) используется для улучшения случайности, поскольку это необязательно? если нет, то какой смысл использовать его.

Цените свою помощь!

Спасибо!

+0

Кстати, я бы предложил использовать заголовок '' вместо 'rand()'. – chris

ответ

3

Объявлено в заголовке <cstdlib>. Стандартные заголовки библиотек (<iostream> в вашем примере) могут включают другие стандартные заголовки, но вы не должны полагаться на это, поскольку это конкретная реализация. Включите заголовки, которые вам нужно явно.

Посев генератор случайных чисел является обязательным, если вы не довольны тем, что ваша программа производит такую ​​же «случайную» последовательность каждый раз, когда вы запускаете его :)

0

я будут рассмотрены вопросы:

1) Функция rand() определена в stdlib, поскольку вы можете читать here. time ссылается на time(NULL) для srand функции

2) srand() - Генератор псевдослучайных чисел инициализируется с помощью аргумента, переданного в качестве затравки.

Для каждого значения затравки, используемого при вызове srand, генератор псевдослучайных чисел может генерировать различные последовательности результатов при последующих вызовах rand.

Две разные инициализации с одним и тем же семенем будут генерировать одну и ту же последовательность результатов в последующих вызовах rand.

Если семя установлено в 1, генератор повторно инициализируется до его начального значения и производит те же значения, что и перед любым вызовом rand или srand.

Для генерации случайных чисел srand обычно инициализируется некоторым отличительным значением времени выполнения, таким как значение, возвращаемое временем функции (объявлено в заголовке <ctime>). Это достаточно характерно для большинства тривиальных потребностей рандомизации.

1

rand() функция объявлена ​​в stdlib.h, так что вам нужно #include <stdlib.h> в вашей программе.Вы также можете #include time.h потому что time() функция там объявлена, которая используется для инициализации случайных семян с

srand (time(NULL)); 

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

http://en.cppreference.com/w/cpp/numeric/random/rand

0
  1. Его включают в cstdlib

    Этот стандартный заголовок может быть включает вами iostream

  2. Вы повторно запустить программу и замечаете ничего общего между сгенерированными числами, от предыдущего запуска.

    Да, так, srand - это то, что вам нужно, это семена генератора случайных чисел с текущим временем.

0

Если вы читаете страницу руководства - http://linux.die.net/man/3/rand - он скажет вам, что он автоматически высевают со значением одного. Что касается того, почему вам не нужно включать stdlib, которые должны быть включены в недра iostream

1

rand() определен в стандартной библиотеке. Он объявлен в заголовках <stdlib.h> и <cstdlib>; в первом, это в глобальном пространстве имен; во втором, в пространстве имен std. Вы должны #include соответствующие заголовки для всех стандартных элементов библиотеки, которые использует ваша программа; иногда имена будут объявлены и в других заголовках, но это чисто внутреннее для вашей реализации.

Что касается посева, если вы не засеиваете генератор самостоятельно, вы получите семя по умолчанию, которое будет одинаковым при каждом запуске программы, как если бы вы позвонили srand(1). Вы будете получать ту же последовательность чисел от rand() каждый раз, когда запускаете программу. Это полезно для отладки, но, конечно, не полезно, когда приложение находится в реальном мире. Чтобы создать другую последовательность случайных чисел, позвоните по номеру srand, когда ваша программа запустится, и дайте ей другое значение при каждом его вызове. Вот что делает stand(time(NULL)).

0

Где определена функция rand()?

Он входит в стандартную библиотеку с <stdlib.h>, а <cstdlib> это только C++ обертка <stdlib.h>. Если вам нужна функция time(), не забудьте включить <time.h>.

is srand (time (NULL)) используется для улучшения случайности, поскольку это необязательно?

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

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

Смежные вопросы