The most obvious expression for computing π in APL is ○1
. But what if you can’t remember how ○
works, or your O key is broken, or you feel like taking the road less travelled? With thanks to Wikipedia’s excellent list of Approximations of π, here are some short sweet APL expressions for three-and-a-bit:
3 ⍝ very short
34 ⍝ not so sweet
4s←*∘0.5 ⍝ let's allow ourselves some square roots
+/s 2 3
3.1462643699419723423291350657155731*÷3
3.141380652391393004493075896462748+/1.8*1 0.5 ⍝ Ramanujan
3.141640786499873817845504201238766s 7+s 6+s 5
3.141632544503617840472137945142766÷/7 4*7 9
3.1415672302246093759⍟995
3.141573605337628094187009177086444355÷113
3.141592920353982300884955752212389s s 2143÷22 ⍝ Ramanujan again
3.141592652582646125206037179644022+∘÷/3 7 15 1 292 ⍝ continued fraction
3.14159265301190260407226149477373÷/63 25×17 7+15×s 5
3.14159265380568820189839000630151(1E100÷11222.11122)*÷193
3.141592653643822210363178893440074(⍟744+640320*3)÷s 163 ⍝ Ramanujan yet again
3.141592653589793238462643383279727
This last one is accurate to more places than I ever learned in my youth!
Technical note: to get plenty of precision, these examples were evaluated with 128-bit decimal floating-point, by setting ⎕FR←1287
and ⎕PP←34
.
For more on continued fractions, see cfract in the dfns workspace.
I seem to recall that I was taught to use
22÷7
3.1428571428571428571429
as a good approximation .. that was in slide rule days ..
At 30-decimal places, you can specify a point on the rim of our galaxy, the Milky Way, to pretty much the nearest hydrogen atom!
Depending on what you mean by “pretty much the nearest hydrogen atom”, 30 decimal place may not suffice.
The diameter of Milky Way galaxy is 1e5 to 1.2e5 light years. Therefore, its circumference is π × 1e5 light-years × 1e16 m/light-year × 1e12 picometers/m = 3.14e33 pm. The atomic radius of hydrogen is 53 pm.
0j¯1 × ⍟¯1
3.141592653589793
Since I want to mention Euler’s identity at every opportunity ☺
(* 0j1 × π) = ¯1 Euler’s identity, the most beautiful equation in all of mathematics
(⍟ * 0j1 × π) = ⍟¯1 take log of both sides
(0j1 × π) = ⍟¯1 ⍟ and * are an inverse pair
π = (⍟¯1)÷0j1 divide both sides by 0j1
π = 0j¯1×⍟¯1 ÷0j1 is 0j¯1
This expression satisfies the stated requirements:
can’t remember how ○ works
the O key was broken
take road less travelled
(Trying again as the blogging software made a hash of my formatting.)
0j¯1 × ⍟¯1
3.141592653589793
Since I want to mention Euler’s identity at every opportunity ☺
(* 0j1 × π) = ¯1
Euler’s identity, the most beautiful equation in all of mathematics
(⍟ * 0j1 × π) = ⍟¯1
take log of both sides
(0j1 × π) = ⍟¯1
⍟ and * are an inverse pair
π = (⍟¯1)÷0j1
divide both sides by 0j1
π = 0j¯1×⍟¯1
÷0j1 is 0j¯1
This expression satisfies the stated requirements:
• can’t remember how ○ works
• the O key was broken
• take road less travelled