4 - особый случай. Вы можете предположить, что у вашего PRNG есть 50% шансов на вывод четного числа, что, как мне кажется, имеет место для LCG libc (rand). Следовательно, вероятность вывода четного числа дважды составляет 25%.
Поэтому ...
bool rand_afourth(void)
{
return !!((rand() & 1) & (rand() & 1));
}
А теперь о педантике ...
То, что вы хотите сделать, - это сгенерировать равномерное случайное число, но ограниченное определенным диапазоном, в данном случае энтропией 4. Если ваш PRNG имеет, скажем, энтропию 32-разрядного, вы не можете быть уверены, вычисление выходного мода 4 будет работать как положено. Это требует немного больше работы.
К счастью, эта работа уже была реализована в библиотеке наддува.
boost::uniform_int<> aFourth(1,4)
И вы, например, говорите «ок» каждый раз, когда получаете 1 (или 2, 3, 4, как вам хочется).
Но вы не можете использовать библиотеку наддува. Затем просто посмотрите на кодiform_int и воспроизведите поведение. Таланты подражают, гении крадут. ;)