Для начала, они на самом деле псевдо случайные числа, а не случайные числа.В любом случае, может случиться так, что действительно случайная последовательность имеет именно то свойство, которое вы видите :-) Последовательность 1,1,1,1,1
с такой же вероятностью встречается в действительно случайном наборе, как и 5,2,4,2,99
.
Если вы хотите «более случайную» случайную последовательность, я бы не стал использовать обычные, поставляемые с библиотеками C (если только эти библиотеки не были написаны людьми, которые понимают случайность) - вы должны изучить такие вещи, как Mersenne Twister,используя /dev/random
(если под Linux) и т. д.
Вы также можете посмотреть этот фрагмент своего кода.
if (array[i] == minV)
minOcc++;
if (array[i] == minV)
maxOcc++;
Я считаю, что последний if
должен бытьпо сравнению с maxV
, а не minV
.В противном случае вероятность того, что ваши минимальные и максимальные значения будут отличаться, равна нулю.
Когда я внесу это изменение (и изменю % 3000
на % 30
, чтобы получить диапазон дубликатов), я вижу:
Minmim value is index 112 with value 0 and 65 occurances
Maxium value is index 24 with value 29 and 58 occurances
И не то, чтобы это действительно имело значение с точки зрения этого вопроса, вы можете немного очистить свое правописание:
lenght
-> length
. minmum
-> minimum
maxium
-> maximum
occurances
-> occurrences