Другое дело, что деление сюда прикладывать как-то совсем не хочется. Так что я бы делал что-то типа
unsigned int i=(unsigned int)rand()/((RAND_MAX+1)/256); i=i+i+i; i>>=8;
В результате деление в первой строке (если RAND_MAX не совсем психозный) будет преобразовано к сдвигу (причем, специально каст к unsigned, чтобы знак не расширять) и даст результат 0..255, потом мы его умножим на 3 (сложением, чтобы компилятор не дай бог не позвал процедуру умножения) и разделим на 256 - получим результат от 0 до 2, с таким же распределением, как и rand.
Вроде нигде не промахнулся...
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|