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.
As the IT function evolves to a business-oriented mindset, sustaining skilled workforces is an increasing requirement for IT leaders. In this research brief focused on strategies to build and maintain a skilled IT workforce, Gartner offers actions to mitigate the negative impacts of increasing demand and turnover in the IT workforce and amplifies the importance of continuous growth and development in retaining skilled workers.
The relentless growth of digital data, combined with the need to preserve much of that data for years, has created a dilemma for enterprises hoping to manage their limited IT budgets. While a multi-tier approach to storage can help significantly, the costs of current storage solutions, especially those that are disk-based, are misaligned with tiering needs. Read this white paper to learn about a new approach to data storage - hardware and software coming together through open standards to fundamentally change …