How can I calculate pi using Bash command
This calculates the value of π using Gregory–Leibniz series:
seq -f '4/%g' 1 2 99999
generates the fractions:
4/1
4/3
4/5
4/7
4/9
4/11
4/13
4/15
4/17
4/19
The paste pipeline paste -sd-+
combines those with alternate delimiters -
and +
.
Finally, bc -l
performs the arithmetic to give the result.
EDIT: As noted in the comment, this sequence converges very slowly. Machin's formula has a significantly higher rate of convergence:
Using the same expansion for tan-1(x):
to compute π, we can see that it produces the correct value to 50 digits1 using just the first 50 terms of the series:
$ { echo -n "scale=50;"; seq 1 2 100 | xargs -n1 -I{} echo '(16*(1/5)^{}/{}-4*(1/239)^{}/{})';} | paste -sd-+ | bc -l
3.14159265358979323846264338327950288419716939937510
With just 100 terms, the value of π is computed accurately to more than 100 digits:
$ { echo -n "scale=100;"; seq 1 2 200 | xargs -n1 -I{} echo '(16*(1/5)^{}/{}-4*(1/239)^{}/{})';} | paste -sd-+ | bc -l
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
1Pi
seq -f 4 %g 1 2 99999
Gives the data:
4/1
4/3
4/5
...
4/9999
The paste command takes this list and inserts a - between the first two, a + between the second two, etc (and puts it on one line, so):
4/1-4/3+4/5-4/7......4/9999
Which is an approximation of pi. The 'bc' program calculates this and prints the value.
Not a direct answer to your question about using seq
, but pi can be easily computed using bc
:
echo "scale=1000; 4*a(1)" | bc -l
a
is arctan, and this give pi to 1000 digits.