Подтвердить что ты не робот

Как я могу вычислить pi с помощью команды Bash

Я изучаю bash скрипты. Изучая математические функции, я сталкивался с командой, которая вычисляла значение pi.

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

Хотя я понимаю, как работает базовая команда seq, я не могу понять, как работает эта команда. Кто-нибудь может прояснить, как это работает.?

4b9b3361

Ответ 1

Это вычисляет значение π, используя ряд Грегори-Лейбница:

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 выполняет арифметику, чтобы дать результат.


EDIT: как отмечено в комментарий, эта последовательность сходится очень медленно. Формула Machin имеет значительно более высокую скорость конвергенции:

enter image description here

Используя такое же разложение для tan -1 (x):

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

1Pi

Ответ 2

seq -f 4 %g 1 2 99999 

Дает данные:

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

Команда paste принимает этот список и вставляет a - между первыми двумя, a + между вторыми двумя и т.д. (и помещает его на одну строку, так):

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

Что такое аппроксимация pi. Программа "bc" вычисляет это значение и печатает значение.

Ответ 3

Непосредственный ответ на ваш вопрос об использовании seq, но pi можно легко вычислить с помощью bc:

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

a является arctan, и это дает pi до 1000 цифр.