Dave Kreskowiak
Это легко найти в Google: "C++ случайное число от 0 до 100[^]"
num = (int)(rand() * 9999999) + 1;
Использование оператора " % " для ограничения диапазона имеет побочный эффект генерации более низких значений несколько чаще, чем более высоких.
Member 13079820
#include < stdio.h>
#include <stdlib.h>
#include & lt;time. h>
тап_п(недействительными){
int i = 0;
инт nombre_aleatoire = 0;
srand(time (NULL));
для(i=0; i< 88; i++){
nombre_aleatoire = (int)(rand () * 9999999) + 1;
printf ("%d", nombre_aleatoire);
}
возвращает 0;
}
я попытался изменить значение i (чтобы увидеть больше случайных значений), и оно генерирует отрицательные числа. почему?
Dave Kreskowiak
Прошло много времени с тех пор, как я делал random в C/C++. Все немного изменилось...
Rand () возвращает целое число от 0 до 32767, а не от 0 до 1. Умножьте 32767 на 999999, и вы получите число, которое переполняет int, тем самым давая странные результаты.
В новом коде есть несколько методов возврата диапазона целых чисел, один предвзятый, а другой нет:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <random>
// Define two methods of generating random numbers;
int GetRandomModulo(int min, int max);
int GetRandomModern(int min, int max);
int main()
{
int i = 0;
int num = 0;
srand(time(NULL));
for (i = 0; i < 88; i++)
{
// use
num = GetRandomModulo(1, 9999999);
// or
num = GetRandomModern(1, 9999999);
printf("%d\r\n", num);
}
return 0;
}
int GetRandomModulo(int min, int max)
{
int range = max - min + 1;
int num = rand() % range + min;
return num;
}
int GetRandomModern(int min, int max)
{
// This code is should really be wrapped in its own class to
// prevent constantly reseeding the RNG engine every time it's
// called.
// Seed a Mersenne Twister RNG engine
static std::random_device seed;
static std::mt19937 engine(seed());
static std::uniform_int_distribution<int> ditribution(min, max);
return ditribution(engine);
}