web-dev-qa-db-ja.com

Bashコマンドを使用して円周率を計算するにはどうすればよいですか?

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

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

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

14
poorvank

これは、Gregory–Leibnizシリーズを使用してπの値を計算します。

enter image description here

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


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

enter image description here

日焼けに同じ拡張を使用する-1(バツ):

enter image description here

πを計算すると、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

わずか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円周率

22
devnull

seqの使用に関する質問への直接の回答ではありませんが、円周率はbcを使用して簡単に計算できます。

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

aはarctanであり、これにより円周率が1000桁になります。

9
James Scriven
seq -f 4 %g 1 2 99999 

データを提供します:

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

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

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

これは円周率の近似値です。 'bc'プログラムはこれを計算し、値を出力します。

7
Nathaniel Flath