  Given a $p$-coin that lands heads with unknown probability $p$, we wish to
produce an $f(p)$-coin for a given function $f: (0,1) \rightarrow (0,1)$. This
problem is commonly known as the Bernoulli Factory and results on its
solvability and complexity have already been obtained. Nevertheless, generic
ways to design a practical Bernoulli Factory for a given function $f$ exist
only in a few special cases. We present a constructive way to build an
efficient Bernoulli Factory when $f(p)$ is a rational function with
coefficients in $\mathbb{R}$. Moreover, we extend the Bernoulli Factory problem
to a more general setting where we have access to an $m$-sided die and we wish
to roll a $v$-sided one; i.e., we consider rational functions between open
probability simplices. Our construction consists of rephrasing the original
problem as simulating from the stationary distribution of a certain class of
Markov chains - a task that we show can be achieved using perfect simulation
techniques with the original $m$-sided die as the only source of randomness. In
the Bernoulli Factory case, the number of tosses needed by the algorithm has
exponential tails and its expected value can be bounded uniformly in $p$. En
route to optimizing the algorithm we show a fact of independent interest: every
finite, integer valued, random variable will eventually become log-concave
after convolving with enough Bernoulli trials.
