I always wanted to calculate π to arbitrary number of decimal places (100, 1000 etc.) just for the fun. Recently the google search led me to Chris Hills' excellent article on the very same subject. It took me some time to understand his code and what he is saying about it through the faq.
I am using some ( well, most ) of his code. But there were pieces of code which I had independently thought about ( believe me ). I chose to write the article for my own clarity and thought that someone else could be interested in it as well.
Calculating π to any arbitrarily large numbers involves two major issues.
Every operating system has a finite width to represent integer. On 32 bit operating systems, the integer is often represented by 4 bytes i.e. 32 bits. So large integers cannot be represented without the loss of accuracy. If I want to represent '97616742900186289193' accurately, I cannot use the built-in integer data type because signed integers on 32 bit OS can only represent integers upto 2^32/2 - 1.
So the first piece of puzzle is to implement my own integer data type which can hold arbitrarily large strings of digits. Having my own integer data type means I have to implement my own arithmetic operations such as +, - and /. It is very refreshing to implement these operators !
The second and more interesting but not so obvious piece is selection of number system ( base ). I started with usual decimal number system i.e. base 10 but Chris' article explained why choosing larger number system is key to the implementation. Large numbers can be represented compactly if the base is big. So if the base is 100, all the number from 0 to 99 would have unique representation and 11 in this system would be 101. The project code configures the base depending upon the number of digits desired beyond decimal of π. Because the number system is not decimal (10), I had to think of the arithmetic operators hard §
I used two formulae to compute π†. One is Machin's formula and other is Euler-Gregory-Madhava series. Machin's formula converges fast while as Euler-Gregory-Madhava series is extremely slow to converge ( I will explain why in a minute ).
Machin's formula is given by,
4 * arctan
= 4 * Σ
The Euler-Gregory-Madhava series is given by,
In both the above equations (1) and (2), k takes values from 0 to ∞.
As you can see from equation (1), the denominator gets bigger within short range of terms which means the result of the division gets smaller and smaller which means the terms start contributing to the later part of π.
Compare equation (2) with equation (1). The denominator in equation (2) increases extremely slowly so the result of the division still has significant impact on the digits closer to decimal place. So one must continue to compute much larger range of terms in equation (2). This is the reason Euler-Gregory-Madhava series converges so slowly.
Calculating pi to one million decimal places, Chris Hills, URL : http://www.codeproject.com/KB/recipes/CRHpi.aspx
† URL: http://milan.milanovic.org/math/english/pi/machin.html
§ The reason why I enjoyed doing this exercise so much is I would try very hard on my own to figure out the concepts and the implementation. Only when I was absolutely stuck I referred to Chris' article. I conveniently customized the number system in power of 10 because then the conversion from this number system to 10 at the time of printing value of π becomes trivial.
Live Event Date: December 11, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT
Market pressures to move more quickly and develop innovative applications are forcing organizations to rethink how they develop and release applications. The combination of public clouds and physical back-end infrastructures are a means to get applications out faster. However, these hybrid solutions complicate DevOps adoption, with application delivery pipelines that span across complex hybrid cloud and non-cloud environments. Check out this …
Event Date: October 29, 2014
It's well understood how critical version control is for code. However, its importance to DevOps isn't always recognized. The 2014 DevOps Survey of Practice shows that one of the key predictors of DevOps success is putting all production environment artifacts into version control.
In this webcast, Gene Kim discusses these survey findings and shares woeful tales of artifact management gone wrong! Gene also shares examples of how high-performing DevOps …