17

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

seq -f '4/%g' 1 2 99999 | paste -sd-+ | bc -l

虽然我了解基本的 seq 命令是如何工作的,但我无法理解上述命令是如何工作的。有人可以澄清它是如何工作的吗?

4

3 回答 3

24

这使用 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

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

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


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

在此处输入图像描述

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

在此处输入图像描述

为了计算 π,我们可以看到它仅使用该系列的前 50 个项产生了 50 个数字1的正确值:

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

只需 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

1个 圆周率

于 2014-05-07T17:51:36.133 回答
17

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

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

a是 arctan,这将 pi 赋予 1000 位数字。

于 2015-05-01T14:30:36.283 回答
7
seq -f 4 %g 1 2 99999 

给出数据:

4/1
4/3 
4/5 
...
4/9999

paste 命令获取此列表并在前两个之间插入 - ,在后两个之间插入 + 等(并将其放在一行上,因此):

4/1-4/3+4/5-4/7......4/9999

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

于 2014-05-07T17:51:04.570 回答