This article has a couple of variations of the algorithm with example code in Haskell.
As the author points out, representation change algorithms like these are showcase examples for lazy evaluation.
This in turn makes Perl 6 a very good language to implement them, besides Haskell.
With the techniques explained in the article you can replace the large fixed-size array @a for the state by two FatRats or four Integers and actually return an infinite series of decimal digits (limited only by memory resources as the state numbers grow).
These algorithms are not particularly fast, but not half bad either. Perfect, if you want to incrementally increase precision as you need it. In fact, they could be used in a framework for arbitrarily precise real arithmetic.
I would love Perl 6 to support high precision math beyond rational arithmetic.