## Calculating PI

The Internet is full of “one-liners” and if you search a bit, you can find many. A one-liner typically means (a chain of) commands that produce useful results quickly.

I came across a nice one-liner just now. The “binary calculator” or bc is a powerful UNIX tool. Calculating the value of **PI** with an arbitrary number of decimals (the number of decimals only restricted by the power of your OS, available RAM or internal limitations of the program) goes like this:

echo “scale=XXXX;4*a(1)” | bc -l

Where “XXXX” is the number of digits you want to calculate. Calling bc with the “**-l**” parameter causes bc to load it’s mathematical library. The function “**a()**” is the arctangent function.

Let’s say you need the value of **PI** with an accuracy of a thousand decimals.

`$ echo "scale=1000;4*a(1)" | bc -l`

`3.141592653589793238462643383279502884197169399375105820974944592307\`

`81640628620899862803482534211706798214808651328230664709384460955058\`

`22317253594081284811174502841027019385211055596446229489549303819644\`

`28810975665933446128475648233786783165271201909145648566923460348610\`

`45432664821339360726024914127372458700660631558817488152092096282925\`

`40917153643678925903600113305305488204665213841469519415116094330572\`

`70365759591953092186117381932611793105118548074462379962749567351885\`

`75272489122793818301194912983367336244065664308602139494639522473719\`

`07021798609437027705392171762931767523846748184676694051320005681271\`

`45263560827785771342757789609173637178721468440901224953430146549585\`

`37105079227968925892354201995611212902196086403441815981362977477130\`

`99605187072113499999983729780499510597317328160963185950244594553469\`

`08302642522308253344685035261931188171010003137838752886587533208381\`

`42061717766914730359825349042875546873115956286388235378759375195778\`

`18577805321712268066130019278766111959092164201988`

Isn’t this fun? And on my old dual P2/233MHz server, this took roughly eight seconds.

Now, to compare the usefulness of the Linux platform to good old Solaris, this is what you get on Solaris 8:

```
$ echo "scale=1000;4*a(1)" | bc -l
scale factor is too large
3.14159265358979323844
```

Cheers, Eric

**Posted:** 18 March, 2009 in Fun, Software.

Tags: math, oneliner

## Comments

**Pingback** from **calculate pi to a 1000 digits » Philipp Klaus's Blog**

**Posted: ** January 22, 2011 at 15:25

[...] http://alien.slackbook.org/blog/calculating-pi/ [...]

**Comment** from **Ron**

**Posted: ** December 13, 2011 at 01:17

I ran 6 simultaneous instances to determine if I had a solid overclock in Linux. Thanks!

**Comment** from **Aristotle Pagaltzis**

**Posted: ** April 8, 2012 at 02:01

Less typing:

`bc -l <<< 'scale=1000; 4*a(1)'`

CommentfromFish_KungfuPosted:October 24, 2010 at 19:43Very cool! Thanks for posting that fun gnugget! Using that as inspiration, here is a way to calculate Phi, or the Golden Ratio (http://en.wikipedia.org/wiki/Golden_ratio), to an arbitrary number of decimal places. The example below calculates to 10 decimal places.

echo “scale=10;(1 + sqrt(5))/2″ | bc -l

Slack On!

~~Fish~~