Любая попытка превратить равномерное распределение [0..n-1] в
равномерное же распределение [0..m-1] чистой функцией обречена на
провал, если n%m != 0. Если у нас на входе всего 32768 разных
значений X, которые мы хотим превратить в 1000 значений Y, нужно
смириться с тем, что на некоторые Y отобразится 32 значения X, а на
некоторые 33, и это ещё в лучшем случае. По ссылке как раз
предлагается простой вариант: для m==1000 значения rand() в
диапазоне [32000..32767] считать "плохими", и вызывать rand() до тех пор, пока она не вернёт "хорошее" значение.