Во-первых, ваш код должен быть исправлен на x + (rand() % (y - x + 1))
Функция rand
генерирует псевдослучайное положительное целое число между 0
и RAND_MAX
, которое обычно реализуется алгоритмом PMMLCG Хатчинсона. Когда мы предполагаем, что RAND_MAX
достаточно велико, возможности появления любого положительного целого числа одинаковы. И поэтому, когда вы примените результат к операции mod
, скажем, %n
, тогда у нас будет псевдослучайное целое число в интервале [0, n-1]
В вашем примере, (rand() % (y - x + 1))
генерирует псевдослучайное целое число между [0, y-x]
и когда мы добавляем x
к нему, мы получаем псевдослучайное значение между [x, y]
Однако, как дополнение, этот алгоритм имеет то, что я бы назвал серьезными проблемами, наиболее очевидным из которых является значение RAND_MAX
. Стандарт только гарантирует, что это целое число не менее 32767
, что является очень малым значением, и поэтому оно может способствовать неравномерности вероятности появления кандидатов в интервале.
Я предлагаю вам узнать использовать библиотеку <random>
в C ++ 11: https://en.cppreference.com/w/cpp/header/random