Вы должны засеять генератор случайных чисел. see here for an example.
не-seeded.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf ("Random not seeded: %d\n", rand()%10);
return 0;
}
не посеяны выход
Random not seeded: 3
Random not seeded: 3
Random not seeded: 3
Random not seeded: 3
Random not seeded: 3
seeded.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
printf ("Random seeded: %d\n", rand()%10);
return 0;
}
отобранный выход
Random fast seeded: 7
Random fast seeded: 7
Random fast seeded: 7
Random fast seeded: 1
Random fast seeded: 1
Random fast seeded: 1
Random fast seeded: 5
Random fast seeded: 5
Random fast seeded: 5
Random fast seeded: 5
fast-seeded.c
Если вы хотите, чтобы у вас была возможность использовать вашу утилиту не один раз в секунду, вам придется использовать другой источник для семян, иначе вы все равно получите несколько повторяющихся случайных чисел.
Вот пример, который использует наносекунды вместо time()
, который возвращает только секунды.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
/* using nano-seconds instead of seconds */
srand((time_t)ts.tv_nsec);
printf ("Random fast seeded: %d\n", rand()%10);
return 0;
}
быстро посеяны выход
Здесь можно увидеть, что номера не сгруппированы так же, как и в предыдущем примере.
Random fast seeded: 9
Random fast seeded: 6
Random fast seeded: 5
Random fast seeded: 6
Random fast seeded: 1
Random fast seeded: 1
Random fast seeded: 9
Random fast seeded: 4
Random fast seeded: 3
Random fast seeded: 2
равномерно распределенные случайные числа
Если вы заинтересованы в равномерно распределенных случайных чисел, вы должны увидеть user3003631 «s ответ ниже. Если вы действительно используете C++, я бы рекомендовал делать случайные числа. More information here too on this.
подсказка: читать на рандов и посевом генераторы случайных чисел. – tletnes
Похоже, нет звонков [srand] (http://www.cplusplus.com/reference/cstdlib/srand/)? – crashmstr
Необходимо вызвать srand() для просмотра функций. См. Http://stackoverflow.com/questions/4926622/how-to-generate-different-random-number-in-a-loop-in-c – OldProgrammer