17

私はbashスクリプトを学んでいます。数学関数を調べているときに、pi の値を計算するコマンドに出くわしました。

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

基本的な seq コマンドがどのように機能するかは理解していますが、上記のコマンドがどのように機能するかを理解できません。誰でもそれがどのように機能するかを明確にしてもらえますか?

4

3 に答える 3

24

これは、グレゴリー・ライプニッツ級数を使用して π の値を計算します。

ここに画像の説明を入力

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、演算を実行して結果を出します。


編集:コメントに記載されているように、このシーケンスは非常にゆっくりと収束します。 マチンの公式は収束率がかなり高い:

ここに画像の説明を入力

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

の使用に関する質問に対する直接的な回答ではありませんが、 を使用してseqpi を簡単に計算できます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

貼り付けコマンドはこのリストを取得し、最初の 2 つの間に - を挿入し、2 番目の 2 つの間に + を挿入します (そして、1 行に配置します)。

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

これは pi の近似値です。「bc」プログラムはこれを計算し、値を出力します。

于 2014-05-07T17:51:04.570 に答える