我正在学习 bash 脚本。在探索数学函数时,我遇到了一个计算 pi 值的命令。
seq -f '4/%g' 1 2 99999 | paste -sd-+ | bc -l
虽然我了解基本的 seq 命令是如何工作的,但我无法理解上述命令是如何工作的。有人可以澄清它是如何工作的吗?
这使用 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个 圆周率
不是直接回答您关于 using 的问题seq
,但可以使用以下方法轻松计算 pi bc
:
echo "scale=1000; 4*a(1)" | bc -l
a
是 arctan,这将 pi 赋予 1000 位数字。
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' 程序计算并打印该值。