Я студент C++, и я работаю над созданием генератора случайных чисел.Как улучшить этот код генератора случайных чисел в C++?
Infact Я должен сказать, что мой алгоритм выбирает число в пределах определенного диапазона.
Я пишу это только из-за моего любопытства.
Я не оспариваю существующие функции библиотеки.
Я всегда использую библиотечные функции при написании приложений на основе случайности, но я снова заявляю, что я просто хочу сделать это из-за моего любопытства.
Я также хотел бы знать, есть ли что-то не так с моим алгоритмом или с моим подходом. Поскольку я искал работу PRNG, и на некоторых сайтах они сказали, что существует математический алгоритм, а предопределенная серия чисел и семя просто устанавливает указатель в другую точку в серии, и через несколько секунд последовательность повторяется.
Мой алгоритм просто начинает перемещаться туда и обратно в массиве возможных значений, и семя каждый раз прерывает цикл с разными значениями. Я не понимаю, что этот подход неправильный. Я получил ответы, предлагающие другой алгоритм, но они не объяснили Что случилось с моим текущим алгоритмом?
Да, там была проблема с моего семени, как это было не точным и сделал результат немного предсказуем, как здесь: -
соиЬ < < р-н (50100);
Результаты в четыре раза превышают 74,93,56,79.
См. Схему «возрастающего порядка».
И для образцов большого диапазона можно было легко увидеть. Я получил ответ на получение хороших семян, но также рекомендовал новый алгоритм (но не сказал почему?).
Альтернативный способ может состоять в случайном перемещении массива, произвольно генерирующего новую последовательность каждый раз. И шаблон растущего порядка будет отключен. Любая помощь с этой перестановкой тоже будет хорошей. Вот код ниже. И если моя функция невозможно, пожалуйста, сообщите мне.
Спасибо вам в ожидании.
int rn(int lowerlt, int upperlt)
{
/* Over short ranges, results are satisfactory.
* I want to make it effective for big ranges.
*/
const int size = upperlt - lowerlt; // Constant size of the integer array.
int ar[size]; // Array to store all possible values within defined range.
int i, x, ret; // Variables to control loops and return value.
long pointer = 0; //pointer variable. The one which breaks the main loop.
// Loop to initialize the array with possible values..
for (i=0, x=lowerlt; x <= upperlt; i++, x++)
ar[i]=x;
long seed = time(0);
//Main loop . To find the random number.
for (i=0; pointer <= seed; i++, pointer++)
{
ret = ar[i];
if (i == size-1)
{
// Reverse loop.
for (; i >= 0; i--)
{
ret=ar[i];
}
}
}
return ret;
}
«Основная проблема» является то, что писать ГСЧ трудно, и нет ничего, в частности, рекомендовать подход вы принять. Ответ на этот вопрос будет состоять только в том, чтобы предложить другой, существующий алгоритм, который вы также можете найти для себя, с большей пользой. – EJP
@ EJP Building RNG сложно или нет, поиск решений важен. Я знаю об библиотечных функциях. Я просто прошу о помощи. Мне просто интересно узнать о различных методах программирования. Я здесь новичок. – anjanik012
Так что найдите один, как я и рекомендовал. Вместо того, чтобы начинать с догадок. Вы узнаете много. – EJP