Тут очень много зависит от того, что именно вы называете случайным числом. Фишка в том, что ни один из приведенных выше примеров скорее всего не пройдет
diehard test, не смотря на то, что число, вобщем-то будет "случайным".
Вариант о котором я думал: выбирать случайно из двух диапазонов: min<exclude и exclude>max - но это расточительно, если нужно часто радном генерировать.
А можно полюбопытствовать, зачем это понадобилось, и на скольк важна правильная (взвешенная) рандомность?
silin: О, я твой вариант не видел, когда писал, я вот тоже о чем-то таком думал, только не нужно два раза random() вызывать. Если закешировать первый вызов и им и воспользоваться, то и дешевле выйдет и больше вероятность, что в итоге распределение будет правильным.