如何使用Bash命令计算pi

poo*_*ank 14 bash shell bc seq

我正在学习bash脚本.在探索数学函数时,我遇到了一个计算pi值的命令.

seq -f '4/%g' 1 2 99999 | paste -sd-+ | bc -l
Run Code Online (Sandbox Code Playgroud)

虽然我理解基本的seq命令是如何工作的,但我无法理解上述命令是如何工作的.任何人都可以澄清它是如何工作的.

dev*_*ull 22

这使用Gregory-Leibniz系列计算π的值:

在此输入图像描述

seq -f '4/%g' 1 2 99999 生成分数:

4/1
4/3
4/5
4/7
4/9
4/11
4/13
4/15
4/17
4/19
Run Code Online (Sandbox Code Playgroud)

粘贴管道paste -sd-+将那些与备用分隔符-+.

最后,bc -l执行算术以给出结果.


编辑:如评论所述,此序列收敛非常缓慢. Machin的公式具有明显更高的收敛率:

在此输入图像描述

对tan -1(x)使用相同的展开:

在此输入图像描述

计算π,我们可以看到,它产生正确的值到50位1只使用该系列的第50项:

$ { echo -n "scale=50;"; seq 1 2 100 | xargs -n1 -I{} echo '(16*(1/5)^{}/{}-4*(1/239)^{}/{})';} | paste -sd-+ | bc -l
3.14159265358979323846264338327950288419716939937510
Run Code Online (Sandbox Code Playgroud)

只有100个项,π的值精确计算到超过100位:

$ { echo -n "scale=100;"; seq 1 2 200 | xargs -n1 -I{} echo '(16*(1/5)^{}/{}-4*(1/239)^{}/{})';} | paste -sd-+ | bc -l
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Run Code Online (Sandbox Code Playgroud)

1


Jam*_*ven 8

不能直接回答您关于使用的问题seq,但可以使用bc以下方法轻松计算pi :

 echo "scale=1000; 4*a(1)" | bc -l
Run Code Online (Sandbox Code Playgroud)

a 是arctan,这给pi增加了1000位数.


Nat*_*ath 7

seq -f 4 %g 1 2 99999 
Run Code Online (Sandbox Code Playgroud)

提供数据:

4/1
4/3 
4/5 
...
4/9999
Run Code Online (Sandbox Code Playgroud)

paste命令接受这个列表并插入 - 在前两个之间,在第二个之间加一个+等等(并将它放在一行上,所以):

4/1-4/3+4/5-4/7......4/9999
Run Code Online (Sandbox Code Playgroud)

这是pi的近似值.'bc'程序计算它并打印该值.