<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2800.1106" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV><FONT face=Arial size=2>For some reason the attachment doesn't seem to be 
working, at least for me.&nbsp; Here's the code just in case.&nbsp; Please 
excuse the spacing.&nbsp; For some reason the tabs are only represented by one 
space.</FONT></DIV><FONT face=Arial size=2>
<DIV><BR><FONT face="Courier New">import std.c.stdio;<BR>import 
std.c.stdlib;<BR>import std.c.time;</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">const int LONG_TIME=4000;</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">byte[] p;<BR>byte[] t;<BR>int q;</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">int main(char[][] args)<BR>{<BR>&nbsp;time_t 
startime, endtime;</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">&nbsp;if (args.length == 2) 
{<BR>&nbsp;&nbsp;sscanf(&amp;args[1][0],"%d",&amp;q);<BR>&nbsp;} else 
{<BR>&nbsp;&nbsp;printf("Usage: pi 
[precision]\n");<BR>&nbsp;&nbsp;exit(55);<BR>&nbsp;}</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">&nbsp;if (q &lt; 
0)<BR>&nbsp;{<BR>&nbsp;&nbsp;printf("Precision was too low, running with 
precision of 0.\n");<BR>&nbsp;&nbsp;q = 0;<BR>&nbsp;}</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">&nbsp;if (q &gt; 
LONG_TIME)<BR>&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp; printf("Be prepared to wait a 
while...\n");<BR>&nbsp;}</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">&nbsp;// Compute one more digit than we display to 
compensate for rounding<BR>&nbsp;q++;</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">&nbsp;p.length = q + 1;<BR>&nbsp;t.length = q + 
1;</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">&nbsp;// Compute 
pi<BR>&nbsp;std.c.time.time(&amp;startime);<BR>&nbsp;arctan2();<BR>&nbsp;arctan3();<BR>&nbsp;mul4();<BR>&nbsp;std.c.time.time(&amp;endtime);</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">&nbsp;// Return to the number of digits we want to 
display<BR>&nbsp;q--;</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">&nbsp;// Print pi<BR>&nbsp;printf("pi = 
%d.",cast(int)(p[0]));<BR>&nbsp;for (int i = 1; i &lt;= q; 
i++)<BR>&nbsp;&nbsp;printf("%d",cast(int)(p[i]));<BR>&nbsp;printf("\n");<BR>&nbsp;printf("%ld 
seconds to compute pi with a precision of %d 
digits.\n",endtime-startime,q);</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">&nbsp;return 0;<BR>}</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">/* Template that determines if a number is a power 
of <BR>&nbsp;* 2 at compile time<BR>&nbsp;*/<BR>template isPow2(uint n) { const 
bool isPow2 = (n % 2) != 0 ? false : isPow2!(n / 2); }<BR>template isPow2(uint n 
: 0) { const bool isPow2 = false; }<BR>template isPow2(uint n : 1) { const bool 
isPow2 = false; }<BR>template isPow2(uint n : 2) { const bool isPow2 = true; 
}</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">/* Use a template to get good compile time 
optimizations for<BR>&nbsp;* division and multiplication 
<BR>&nbsp;*/<BR>template fastdiv(int divisor)<BR>{<BR>&nbsp;void 
fastdiv()<BR>&nbsp;{<BR>&nbsp;&nbsp;int r; // remainder</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">&nbsp;<BR>&nbsp;&nbsp;for (int i = 0; i &lt;= q; 
i++) {<BR>&nbsp;&nbsp;&nbsp;int b = t[i] + r * 10;<BR>&nbsp;&nbsp;&nbsp;int q = 
b / divisor;<BR>&nbsp;&nbsp;&nbsp;static if(isPow2!(divisor)) 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;r = b % divisor; // compiler can optimize modulus 
for powers of 2<BR>&nbsp;&nbsp;&nbsp;else <BR>&nbsp;&nbsp;&nbsp;&nbsp;r = b - q 
* divisor;<BR>&nbsp;&nbsp;&nbsp;t[i] = 
q;<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>}</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">// Computes the arctangent of 2<BR>void 
arctan2()<BR>{<BR>&nbsp;int n;</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">&nbsp;t[0] = 
1;<BR>&nbsp;fastdiv!(2);<BR>&nbsp;add();<BR>&nbsp;n = 1;<BR>&nbsp;do 
{<BR>&nbsp;&nbsp;mul(n);<BR>&nbsp;&nbsp;fastdiv!(4);<BR>&nbsp;&nbsp;div(n += 
2);<BR>&nbsp;&nbsp;if ((((n-1) / 2) % 2) == 
0)<BR>&nbsp;&nbsp;&nbsp;add();<BR>&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;sub();<BR>&nbsp;} 
while (!tiszero());<BR>}</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><BR><FONT face="Courier New">// Computes the arctangent of 3<BR>void 
arctan3()<BR>{<BR>&nbsp;int n;</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">&nbsp;t[0] = 
1;<BR>&nbsp;fastdiv!(3);<BR>&nbsp;add();<BR>&nbsp;n = 1;<BR>&nbsp;do 
{<BR>&nbsp;&nbsp;mul(n);<BR>&nbsp;&nbsp;fastdiv!(9);<BR>&nbsp;&nbsp;div(n += 
2);<BR>&nbsp;&nbsp;if ((((n-1) / 2) % 2) == 
0)<BR>&nbsp;&nbsp;&nbsp;add();<BR>&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;sub();<BR>&nbsp;} 
while (!tiszero());<BR>}</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">void add()<BR>{</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">&nbsp;for (int j = q; j &gt;= 0; 
j--)<BR>&nbsp;{<BR>&nbsp;&nbsp;if (t[j] + p[j] &gt; 9) 
{<BR>&nbsp;&nbsp;&nbsp;p[j] += t[j] - 
10;<BR>&nbsp;&nbsp;&nbsp;p[j-1]++;<BR>&nbsp;&nbsp;} 
else<BR>&nbsp;&nbsp;&nbsp;p[j] += t[j];<BR>&nbsp;}<BR>}</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">void sub()<BR>{<BR>&nbsp;for (int j = q; j &gt;= 
0; j--)<BR>&nbsp;&nbsp;if (p[j] &lt; t[j]) {<BR>&nbsp;&nbsp;&nbsp;p[j] -= t[j] - 
10;<BR>&nbsp;&nbsp;&nbsp;p[j-1]--;<BR>&nbsp;&nbsp;} 
else<BR>&nbsp;&nbsp;&nbsp;p[j] -= t[j];<BR>}</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><BR><FONT face="Courier New">void mul(int multiplier)<BR>{<BR>&nbsp;int 
c;</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><BR><FONT face="Courier New">&nbsp;for (int i = q; i &gt;= 0; i--) 
{<BR>&nbsp;&nbsp;int b = t[i] * multiplier + c;<BR>&nbsp;&nbsp;c = b / 
10;<BR>&nbsp;&nbsp;t[i] = b - c * 10; <BR>&nbsp;}<BR>}</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><BR><FONT face="Courier New">void mul4()<BR>{<BR>&nbsp;int c;</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">&nbsp;for (int i = q; i &gt;= 0; i--) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
int b = p[i] * 4 + 
c;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
c = b / 10;<BR>&nbsp;&nbsp;p[i] = b - c * 10; <BR>&nbsp;}<BR>}</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><BR><FONT face="Courier New">void div(int divisor)<BR>{<BR>&nbsp;int r; // 
remainder</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 
Optimization: It's faster to do floatint point multiplication 
than<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * integer division. 
This is because there is no integer division 
instruction.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * Under the 
hood, integer division is essentially floating-point 
division.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double idiv = 1.0 / 
divisor;</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">&nbsp;for (int i = 0; i &lt;= q; i++) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
int b = t[i] + r * 10; <BR>&nbsp;&nbsp;int quotient = cast(int)(cast(double)b * 
idiv);<BR>&nbsp;&nbsp;r = b - quotient * divisor;<BR>&nbsp;&nbsp;t[i] = 
quotient;<BR>&nbsp;}<BR>}</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New">int tiszero()<BR>{<BR>&nbsp;for (int k = 0; k 
&lt;= q; k++)<BR>&nbsp;&nbsp;if (t[k] != 0)<BR>&nbsp;&nbsp;&nbsp;return 
false;<BR>&nbsp;return true;<BR>}</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV></FONT>&nbsp;</DIV></BODY></HTML>