<?xml version="1.0" encoding="windows-1252"?>
<node id="993224" title="Re^2: Computing pi to multiple precision" created="2012-09-12 09:21:23" updated="2012-09-12 09:21:23">
<type id="11">
note</type>
<author id="524457">
martin</author>
<data>
<field name="doctext">
&lt;p&gt;
[http://web.comlab.ox.ac.uk/oucl/work/jeremy.gibbons/publications/spigot.pdf|This article] has a couple of variations of the algorithm with example code in Haskell.
&lt;/p&gt;
&lt;p&gt;
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.
&lt;/p&gt;
&lt;p&gt;
With the techniques explained in the article you can replace the large fixed-size array &lt;tt&gt;@a&lt;/tt&gt; 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).
&lt;/p&gt;
&lt;p&gt;
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.
&lt;/p&gt;</field>
<field name="root_node">
992580</field>
<field name="parent_node">
992590</field>
</data>
</node>
