Найти тему

Считаем 100 знаков числа Пи в Python и поём их по-китайски

творчество нейронной сети fusionbrain.ai/diffusion
творчество нейронной сети fusionbrain.ai/diffusion

-- Сэн Ии Су Ии Ву Ар Джии-йоу...

Что вы на меня так уставились? По-моему, нет ничего естественнее!

Особенно учитывая то, насколько это число неискоренимо. Пи в математике и физике - это хуже, чем борщевик Сосновского и электросамокаты "ВЖУХ" вместе взятые. А также число Пи=3.1415926... широко используется в анекдотах, остроумных или не очень. Ну, а еще бывает, что жизнь не отличить от анекдота и "Панорамы".

Как сообщает китайское издание «Новая культура», Дун Луян, которой в настоящее время 3,5 года, впервые продемонстрировала свои способности на свадьбе своего дяди год назад. За 3 минуты она на одном дыхании безошибочно назвала 300 цифр числа «пи» после запятой.
Шао Лицюань, мама девочки с феноменальной памятью, рассказала, что дочка с самого начала была неравнодушна к цифрам. Когда цифры присутствовали в детских песнях, она очень любила их петь.

(Старая история. Наверное, девочка с тех пор уже выросла. Выучила "Троецарствие", спела таблицы Брадиса. Или уже закончила университет, всякое бывает).

Когда-то люди целую жизнь тратили, чтобы посчитать Пи как можно точнее или найти для него адекватную замену. На практике применяли, например, приближение Архимеда 22/7 = 3.142... (три верных знака) или найденную китайским математиком Цзу Чунчжи в V в. н.э. умопомрачительную дробь 355/113=3.1415929... (семь верных знаков). Применяли числа второго сорта: 25/8=3.125, √10=3.162... В военное время Пи достигало значения 4. В мирное время опускалось до 3, особенно для гренландских китов.

-2

В.И. Арнольд. Цепные дроби. с. 3. (по-видимому, шутка от начала до конца)

В течение почти двух тысяч лет Пи вычисляли главным образом при помощи сурового древнегреческого метода исчерпывания. Заключается он в вот в чем. Периметр правильного многоугольника, вписанного в единичную окружность, всегда меньше, чем длина окружности, ведь хорда короче дуги. Периметр описанного многоугольника, наоборот, больше длины окружности. При этом периметры вписанного и описанного многоугольников с ростом числа сторон всё ближе друг к другу. Длина окружности заключена между ними. Значит, берем сторон побольше, и нам уже хорошо. А если число сторон стремится к бесконечности - круг полностью исчерпан изнутри и снаружи. Найден исчерпывающий ответ.

Вписанный и описанный двенадцатиугольники. Радиус окружности равен 1/2, ее длина равна Пи. Периметр синего двенадцатиугольника равен 3, периметр красного - 3.21539
Вписанный и описанный двенадцатиугольники. Радиус окружности равен 1/2, ее длина равна Пи. Периметр синего двенадцатиугольника равен 3, периметр красного - 3.21539

Интерактивные демонстрации на эту тему можно посмотреть здесь (Wolfram) и здесь (GeoGebra).

Удобнее всего на каждом шаге удваивать число сторон, тогда формулы для пересчета будут более-менее ручными. Например, в конце XVI в. Лудольф ван Цейлен посчитал вручную длину стороны правильного 2^35-угольника (больше 34 млрд. сторон!), и нашел вначале 20, а затем и 35 точных знаков числа Пи, которые завещал высечь на своем надгробии (источник изображения). Впечатлившись его трудолюбием, европейские математики еще долго называли Пи константой Лудольфа.

Надгробный камень Лудольфа ван Цейлена (копия)
Надгробный камень Лудольфа ван Цейлена (копия)

Я не буду пересказывать другие занимательные факты из истории. Все это и многое другое можно прочесть, например, в брошюре А.В. Жукова "О числе Пи".

Цель в другом. Мы воспользуемся возможностями языка программирования Python (он же пайтон, питон, тупон и т.д.), чтобы проследить за математиками прошлого и проверить знаки, которые они находили (правда ли, что у них должно было столько получиться?) Благо нам это не будет стоить тысяч часов, проведенных за делением и извлечением квадратных корней. Даже запускать программу можно в облачной среде Google Colab. При желании - хоть с телефона. Регистрация бесплатная, все ваши программы привязываются к гугл-почте и мирно покоятся на вашем гугл-диске. Конечно, никто не мешает поставить на свой компьютер сборку Anaconda, и держать программы при себе. В использовании облачный питон от домашнего почти не отличается.

Реализация длинной арифметики - неплохое упражнение по программированию, которое, быть может, принесет пользу начинающим кодерам. Но мы всё это и так давно умеем (ну, вроде, как бы...). Поэтому просто стянем из интернета пример применения библиотеки mpmath, в которой реализованы вычисления с произвольной точностью, и переделаем пример под свои цели.

Если вы уже знаете, с чем едят Питон, то для перехода от расчетов в обычных чисел с плавающей точкой к длинным достаточно проделать ровно две вещи:

(1) устанавливаем глобально точность вычислений, присваивая mp.dps = 100 (сто знаков после запятой);

(2) все числа преобразуем из целых во внутренний тип библиотеки операторами x = mp.mpf(n) , минуя стандартные типы с плавающей точкой. Иначе появятся ошибки округления чисел типа double в 15-16 знаке, нам такого не надо.

Вторая из величайших математических констант всех времен и народов, число e, имеет менее скверный нрав, чем Пи, и считать ее проще. Поэтому начнем с нее. Число e - это у нас не что иное как сумма обратных к факториалам чисел, а факториал натурального числа n - произведение натуральных чисел от 1 до n. Например, 3!=1×2×3 = 6, 10!=1×2×...×10=3628800.

По многим причинам удобно считать, что 0!=1. Если бы мы складывали, то "не прибавить ничего" означало бы "прибавить ноль". Но мы перемножаем: "ни на что не умножить", - это означает "умножить на единицу".

И еще, здесь будет чуть лучше считать не факториалы, а сразу обратные к ним слагаемые.

Суммируя 1/0!+1/1!+ ... + 1/20!, удается найти 18 верных знаков числа e. В библиотеке mpmath есть функция (или, вернее, объект-константа) mp.e, которая всегда выдаст e с заданной нами точностью, - с ней сравниваем.

-5

(В дзене нет возможности вставлять код, поэтому вот ссылка на блокнот. Его можно запускать, копировать и использовать как угодно, если вдруг потребуется.)

Для 100 точных знаков потребуется просуммировать до n=71. Здесь слагаемые убывают очень быстро, быстрее любой геометрической прогрессии. А вот с Пи это делать несколько сложнее. Хорошие ряды для Пи на дороге не валяются.

Да, кстати, сравнивать знаки вручную неудобно. Ну, нафиг... Пусть компьютер сам покажет правильные и неправильные. Желательно - здесь же, в блокноте с кодом.

Для этого потребуется чуть-чуть пошаманить. Jupyter Notebook и Colab могут намного больше, чем исполнять блоки кода. Например, они умеют отображать html-файлы, что, в общем, и положено уметь веб-интерфейсам. Значит, строку с десятичными цифрами нужно преобразовать в html. При помощи CSS и матери какого-нибудь тега мы покрасим в красный цвет неверные знаки.

Вначале пишем функцию, которая сравнивает две строки и заключает в тег <em> несовпадающие знаки во второй. Затем записываем содержимое html-файла в две строковые переменные. Приходится так делать, потому что иначе питон будет ругаться на форматирование строк. В форматировании (подстановке значений переменных в строку) используются фигурные скобки, как и в стилях HTML/CSS. Так что стиль будет в первой переменной (htmlhead), а значения строк мы будем вставлять во вторую (htmlbody).

-6

(ссылка на блокнот)

Для проверки сравним число Пи, посчитанное библиотекой, с дробями 22/7 и 355/113.

-7

(ссылка на блокнот)

В первом приближении три верных знака, во втором семь. Ура! Мы не заблудились в трех соснах, - в самом питоне, библиотеке mpmath и HTML/CSS. Это успех.

Теперь возьмем формулы для стороны вписанного многоугольника. Если делать всё в лоб, из теоремы Пифагора получится такое выражение (мы удваиваем число сторон и находим сторону нового многоугольника):

-8

Надо сказать, что Архимед и его последователи действовали хитрее. Есть способ вычислять ту же самую последовательность (или, вернее, две последовательности, одну для периметра вписанного n-угольника, другую для периметра описанного) так, чтобы на каждом шаге приходилось только один раз извлекать корень. Но нам все равно, один раз или два, поэтому будем считать по-простому.

Похоже, что во многих источниках указано неправильное число сторон. Лудольф, по идее, начинал с квадрата и удваивал, удваивал, удваивал число сторон. Значит, должна была получиться степень двойки. Вот здесь написано, что он добрался до 2 в 62-й степени.

-9

Скорее всего, в первом расчете Лудольфа число сторон было 34 миллиарда, во втором 4.6 квинтиллиона. Хотя, по большому счету, оно здесь ни при чем. В формулах, по которым тогда принято было считать, число сторон никак не использовалось.

-10

Все сходится: в первом случае 20 знаков совпадают, во втором - 36. Для последней восьмерки, не отмеченной красным, не удалось проверить, что это правильный знак, поэтому 35.

Приблизительно в 1670-е годы двухтысячелетняя история расчетов архимедовским (архидедовским?) методом закончилась, потому что на арену вышел Его Величество Матан и привел с собой бесконечное количество рядов для вычисления Пи. Самый известный из них - ряд Лейбница:

-11

Теперь принято считать, что этот ряд был открыт на 250 лет раньше, в начале XV в., в Индии (вместе с некоторой частью матана) Ма́дхавой из Сангамаграмы. Увы, к сожалению для Индии, индийский матан не испытал такого стремительного развития, как в Европе при Ньютоне-Лейбнице и других гигантах, в массы не пошел и не превратился в материальную силу.

Эта формула в исходном виде для вычисления Пи подходит хуже, чем метод Архимеда. Но с ней связана любопытная история, ради которой мы, собственно, и красили цифры.

Обычно после правильных цифр в десятичной дроби все идет наперекосяк, и дальше она никак не связана с цифрами Пи. А вот с рядом Мадхавы-Лейбница всё иначе.

Посчитаем сумму 1 млн. слагаемых и 10 млн. слагаемых в скобках (вторая и третья строчка ниже), умножим на 4. Если отметить неправильные цифры, то вот что мы увидим:

-12

(ссылка на блокнот)

Что за чёрт? После первого расхождения во второй строчке идет 10 верных цифр, а в третьей - 12! Потом две неправильные и снова несколько верных. Но так же не бывает! Почему?

Его Величество Матан Первого Курса, конечно, умеет отвечать этот вопрос. Может быть, и я об этом напишу, если вновь услышу пение китайской девочки. Пока могу лишь порекомендовать видео одного из лучших популяризаторов математики в англоязычном ютубе - Бёркарда Полстера (Mathologer), профессора математики из Австралии (к видео есть русские субтитры).

В завершение скажу, что очень не советую использовать в качестве ASMR чтение роботом числа Пи на китайском языке. Лучше уж самому ряды считать. Но если вдруг надумаете, то миллиард цифр можно скачать на сайте Массачусетского технологического института. На первое время хватит. А вот здесь - синтезатор речи.

(Наслаждайтесь, но я вас предупредил.)

-- Сэн Ии Су Ии Ву Ар Джии-йоу...