Добавлю еще один комментарий, чтобы наконец закончить обсцждение недостатков этого решения.
Распределение получающихся при такой генерации величин БУДЕТ равномерным.
Проблема в том, что потенйиальное время исполнения иничем не ограничено, может быть и такое (на бесконечном масштабе), что алгоритм не прекратит исполнения и не сгенерирует ответа (но вероятность этого - ноль). Почти наверное алгоритм закончится. Среднее время исполнения в нем 36/35 попыток состоящих из двух бросков.
Для сравнения. Мы можем точно также бросить кубик дважды и заканчивать генерацию только в случаях выпадения комбинаций
(1,1), (2,2), (3,3), (4,4), (5,5),(6,6), (6,1), отвечающих, соответственно, за числа от 1 до 7.
Вероятность закончить алгоритм по таким правилам за одну итерацию из двух бросков равна 7/36, не закончить - 29/36.
И тогда среднее количество итераций необходимых для генерации одного числа будет
7/36×1+29/36×(2×7/36+29/36×(3
=
7/36×(1+2×(29/36)+3×(29/36)²+...)
=
7/36/(1-29/36)²
=
36/7,
То есть в среднем чуть больше пяти попыток бросить кубик два раза, чтобы получить одно число от 0 до 7.
Проблема алгоритма не в неравномерности, а в том, что проблема остановки в нем решается вероятностным способом.