Другие языки программирования и технологии

Вопрос по функции rand srand c++

Почему при такой записи и постоянном компилировании, значение переменной а устанавливается случайное (например 4000) и при каждом последующем компилировании незначительно меняется (например 4010>>422>>4030>>4045 и т. д.) то есть нет такого что пр каждой компиляции значения были абсолютно разные (например 4000>>1843>>13490>>100500 и т. д) фух надеюсь понятно объяснил))
int main()
{
srand(time(NULL));
int a = rand();
cout << a << endl;
Влад Яценко
Влад Яценко
5 543
Проверь, что у тебя возвращает RAND_MAX
Обычно это число только 32767
Так что больше точно не скакнет, а так вроде и нормально
Eрkebuлаn Кожахметов
79 411
Лучший ответ
Влад Яценко ну я понял что максимум может 32767 вернуть, меня интересует почему возвращаемые значения генерируются по возрастания от начального случайного, а я хочу чтобы были абсолютно разные и не предсказуемые
#include <iostream>
#include <random>
#include <iomanip>
using namespace std;
class Random final {
public:
Random(const int a, const int b) {
set(a, b);
}
void set(int a, int b) {
if (a > b) swap(a, b);
const uniform_int_distribution<>::param_type x(a, b);
x_ = x;
}
int get() {
mt19937 gen(rd_());
const uniform_int_distribution<> uid(x_);
return uid(gen);
}
private:
uniform_int_distribution<>::param_type x_;
random_device rd_;
};

int main() {
Random rand(1, 100);
const auto n = 15U;
for (auto i = 0U; i < n; ++i) cout << setw(4U) << rand.get();
cout.put('\n');
rand.set(-10, 10);
for (auto i = 0U; i < n; ++i) cout << setw(4U) << rand.get();
cout.put('\n');
rand.set(4000, 5000);
for (auto i = 0U; i < n; ++i) cout << setw(5U) << rand.get();
cout.put('\n');
system("pause");
}
просто так выпадает, ничего специфичного
Павел Павлов
Павел Павлов
17 260
Влад Яценко я смотрел видео урок там автор прописывал подобный код и у него возвращало случайные значения, а у меня возвращает например 100 потом чуть больше (нап 115) потом еще чуть больше (нап 123) и т. д. тоесть чтобы вернулось например 5000 мне надо подождать определенное количество времени пока не натикает до этих 5000))
Влад Яценко а хотя нет, там он просто 2 раза ранд прописывал и возвращал два число, первое из них постоянно немного возрастало и возвращалось, а второе возвращалось по нормальному (генерировались разные значения)
И у меня по чуть - чуть прирост прослеживается. Давай так сделаем.

#include <iostream>
#include <windows.h>
#include <string>
#include <ctime>
#include <functional>

using namespace std;

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
srand(time(NULL));
system("color 0A");

for (size_t u = 0; u < 10u; ++u)
{
cout << rand() << endl;
string s = to_string(rand()) + to_string(clock());
hash<string> h;
cout << h(s) << endl;
cout << endl;
}

system("pause");
return 0;
}

Запускай несколько раз этот код и сравнивай по значениям.
Viktor ..
Viktor ..
8 552
погуглите вихрь мерсенна mersenne()