нужно чтобы при этом никогда не выпадала еденица, т.е. как лучше сделать, заменять еденицу на что-то другое, или запускать снова random?! И как это собственно эффек. сделать?!
Во-первых, значения random() % 255 в общем случае не распределены равномерно.
Во-вторых, если тебе нужно получить n случайных значений 0,2,...,n, и у тебя есть функция rnd(), отдающая n случайных значений 0,1,...n-1 то можно поступить так: (rnd()+2)%(n+1).
Убейтесь, те кто пишет %255 в этом случае, т.к. последние разряды генерируется далеко не рандомно. Поэтому применим _только_ вариант с
(double)MAX *random()/(double)(RAND_MAX+1);
далее уэе внося изменения как нужно.
Так, что бенчмарки тут не причём и сравнивать как-то совсем нечего. Если только разные библиотеки для генерации чисел брать.
P.S. ну естесственно помнить о том, что начиная с какого-то момента у Вас случайные числа пойдут по кругу, хотя это пофиг если генерируется мало таких чисел.
к, сожалению, это верно минимум для большинства генераторов случайных чисел. Учитывая то, что эффект Морсальо (Marsaylia чтобы гуглилось лучше) никто не отменял, я смею предположить, что эта проблема есть во всех генераторах случайных чисел.
В целом задача странная:
выдать случайным образом ip для одного компа в сети, т.к. алгоритм никак не учитывает то, что часть элементов множества [2..254] (или {0} U [2..254] как в изначальном) может быть уже занято.
Ясное дело что выбор из [0..253] с переобозначенным 1->254 будет работать быстрее чем ещё 1 случайная выборка, т.к. это в лучшем случае 1 операция умножения 1 сложения и нахождение остатка от деления. В общем случае формула (a*x_{n-1}+b) % m.