Числа после пи. Вычисление N-го знака числа Пи без вычисления предыдущих

Отношение длины окружности к ее диаметру одно и то же для всех окружностей. Это отношение принято обозначать греческой буквой (“пи” - начальная буква греческого слова , которое и означало “окружность”).

Архимед в сочинении “Измерение круга” вычислил отношение длины окружности к диаметру (число ) и нашел, что оно заключено между 3 10/71 и 3 1/7.

Долгое время в качестве приближенного значения использовали число 22/7, хотя уже в V веке в Китае было найдено приближение 355/113 = 3,1415929..., которое было открыто вновь в Европе лишь в XVI веке.

В Древней Индии считали равным = 3,1622….

Французский математик Ф. Виет вычислил в 1579 г. с 9 знаками.

Голландский математик Лудольф Ван Цейлен в 1596 г. публикует результат своего десятилетнего труда – число , вычисленное с 32 знаками.

Но все эти уточнения значения числа производились методами, указанными еще Архимедом: окружность заменялась многоугольником со все большим числом сторон. Периметр вписанного многоугольника при этом был меньше длины окружности, а периметр описанного многоугольника – больше. Но при этом оставалась неясным, является ли число рациональным, т. е. отношением двух целых чисел, или иррациональным.

Лишь в 1767 г. немецкий математик И.Г. Ламберт доказал, что число иррационально.

А еще через сто с лишним лет в 1882 г. другой немецкий математик – Ф. Линдеман доказал его трансцендентность, что означало и невозможность построения при помощи циркуля и линейки квадрата, равновеликого данному кругу.

Простейшее измерение

Начертим на плотном картоне окружность диаметра d (=15 см) , вырежем получившийся круг и обмотаем вокруг него тонкую нить. Измерив длину l (=46,5 см) одного полного оборота нити, разделим l на длину диаметра d окружности. Получившееся частное будет приближенным значением числа , т. е. = l / d = 46,5 см / 15 см = 3,1 . Данный довольно грубый способ дает в обычных условиях приближенное значение числа с точностью до 1.

Измерение с помощью взвешивания

На листе картона начертим квадрат. Впишем в него круг. Вырежем квадрат. Определим массу картонного квадрата с помощью школьных весов. Вырежем из квадрата круг. Взвесим и его. Зная массы квадрата m кв (=10 г) и вписанного в него круга m кр (=7,8 г) воспользуемся формулами

где p и h –соответственно плотность и толщина картона, S – площадь фигуры. Рассмотрим равенства:

Естественно, что в данном случае приближенное значение зависит от точности взвешивания. Если взвешиваемые картонные фигуры будут довольно большими, то возможно даже на обычных весах получить такие значения масс, которые обеспечат приближение числа с точностью до 0,1.

Суммирование площадей прямоугольников, вписанных в полукруг

Рисунок 1

Пусть А (a; 0), В (b; 0). Опишем на АВ полуокружность как на диаметре. Разделим отрезок АВ на n равных частей точками x 1 , x 2 , ..., x n-1 и восстановим из них перпендикуляры до пересечения с полуокружностью. Длина каждого такого перпендикуляра – это значение функции f(x)= . Из рисунка 1 ясно, что площадь S полукруга можно вычислить по формуле

S = (b – a) ((f(x 0) + f(x 1) + … + f(x n-1)) / n.

В нашем случае b=1, a=-1 . Тогда = 2 S .

Значения будут тем точнее, чем больше точек деления будет на отрезке АВ. Облегчить однообразную вычислительную работу поможет компьютер, для которого ниже приводится программа 1, составленная на Бейсике.

Программа 1

REM "Вычисление пи"
REM "Метод прямоугольников"
INPUT "Введите число прямоугольников", n
dx = 1 / n
FOR i = 0 TO n - 1
f = SQR(1 - x ^ 2)
x = x + dx
a = a + f
NEXT i
p = 4 * dx * a
PRINT "Значение пи равно ", p
END

Программа была набрана и запущена при различных значениях параметра n . Полученные значения числа записаны в таблице:

Метод Монте-Карло

Это фактически метод статистических испытаний. Свое экзотическое название он получил от города Монте-Карло в княжестве Монако, знаменитого своими игорными домами. Дело в том, что метод требует применения случайных чисел, а одним из простейших приборов, генерирующих случайные числа, может служить рулетка. Впрочем, можно получить случайные числа и при помощи …дождя.

Для опыта приготовим кусок картона, нарисуем на нем квадрат и впишем в квадрат четверть круга. Если такой чертеж некоторое время подержать под дождем, то на его поверхности останутся следы капель. Подсчитаем число следов внутри квадрата и внутри четверти круга. Очевидно, что их отношение будет приближенно равно отношению площадей этих фигур, так как попадание капель в различные места чертежа равновероятно. Пусть N кр – число капель в круге, N кв – число капель в квадрате, тогда

4 N кр / N кв.

Рисунок 2

Дождь можно заменить таблицей случайных чисел, которая составляется с помощью компьютера по специальной программе. Каждому следу капли поставим в соответствие два случайных числа, характеризующих его положение вдоль осей Ох и Оу . Случайные числа можно выбрать из таблицы в любом порядке, например, подряд. Пусть первое четырехзначное число в таблице 3265 . Из него можно приготовить пару чисел, каждое из которых больше нуля и меньше единицы: х=0,32, у=0,65 . Эти числа будем считать координатами капли, т. е. капля как будто попала в точку (0,32; 0,65). Аналогично поступаем и со всеми выбранными случайными числами. Если окажется, что для точки (х; у) выполняется неравенство, то, значит, она лежит вне круга. Если х + у = 1 , то точка лежит внутри круга.

Для подсчета значения снова воспользуемся формулой (1). Ошибка вычислений по этому методу, как правило, пропорциональна , где D – некоторая постоянная, а N –число испытаний. В нашем случае N = N кв. Из этой формулы видно: для того чтобы уменьшить ошибку в 10 раз (иначе говоря, чтобы получить в ответе еще один верный десятичный знак), нужно увеличить N, т. е. объем работы, в 100 раз. Ясно, что применение метода Монте-Карло стало возможным только благодаря компьютерам. Программа 2 реализует на компьютере описанный метод.

Программа 2

REM "Вычисление пи"
REM "Метод Монте-Карло "
INPUT "Введите число капель ", n
m = 0
FOR i = 1 TO n
t = INT(RND(1) * 10000)
x = INT(t \ 100)
y = t - x * 100
IF x ^ 2 + y ^ 2 < 10000 THEN m = m + 1
NEXT i
p = 4 * m / n

END

Программа была набрана и запущена при различных значениях параметра n. Полученные значения числа записаны в таблице:

n
n

Метод “падающей иголки”

Возьмем обыкновенную швейную иголку и лист бумаги. На листе проведем несколько параллельных прямых так, чтобы расстояния между ними были равны и превышали длину иголки. Чертеж должен быть достаточно большим, чтобы случайно брошенная игла не упала за его пределами. Введем обозначения: а - расстояние между прямыми, l – длина иглы.

Рисунок 3

Положение случайным образом брошенной на чертеж иглы (см. рис. 3) определяется расстоянием Х от ее середины до ближайшей прямой и углом j , которой игла образует с перпендикуляром, опущенным из середины иглы на ближайшую прямую (см. рис. 4). Ясно, что

Рисунок 4

На рис. 5 изобразим графически функцию y=0,5 cos . Всевозможные расположения иглы характеризуются точками с координатами (; у ) , расположенными на участке ABCD. Закрашенный участок AED – это точки, которые соответствуют случаю пересечения иглы с прямой. Вероятность события a – “игла пересекла прямую” – вычисляется по формуле:

Рисунок 5

Вероятность p(a) можно приблизительно определить многократным бросанием иглы. Пусть иглу бросали на чертеж c раз и p раз она упала, пересекая одну из прямых, тогда при достаточно большом c имеем p(a) = p / c . Отсюда = 2 l с / a k.

Замечание. Изложенный метод представляет собой вариацию метода статистических испытаний. Он интересен с дидактической точки зрения, так как помогает совместить простой опыт с составлением довольно сложной математической модели.

Вычисление с помощью ряда Тейлора

Обратимся к рассмотрению произвольной функции f(х). Предположим, что для нее в точке x 0 существуют производные всех порядков до n -го включительно. Тогда для функции f(х) можно записать ряд Тейлора:

Вычисления с помощью этого ряда будут тем точнее, чем больше членов ряда будет задействовано. Реализовать данный способ, конечно, лучше всего на компьютере, для чего можно воспользоваться программой 3.

Программа 3

REM "Вычисление пи"
REM "Разложение в ряд Тейлора "
INPUT n
a = 1
FOR i = 1 TO n
d = 1 / (i + 2)
f = (-1) ^ i * d
a = a + f
NEXT i
p = 4 * a
PRINT "значение пи равно"; p
END

Программа была набрана и запущена при различных значениях параметра n . Полученные значения числа записаны в таблице:

Есть очень простые мнемонические правила для запоминания значения числа :

Недавно на Хабре в одной статье упомянули про вопрос «Что было бы с миром, если бы число Пи равнялось 4?» Я решил слегка поразмышлять на эту тему, используя некоторые (пусть и не самые обширные) знания в соответствующих областях математики. Кому интересно – прошу под кат.

Чтобы представить такой мир, нужно математически реализовать пространство с иным соотношением длины окружности к ее диаметру. Это я и попытался сделать.

Попытка №1.
Оговорим сразу, что рассматривать я буду только двумерные пространства. Почему? Потому что окружность, собственно, определена в двумерном пространстве (если рассмотреть размерность n>2, то отношение меры (n-1)-мерной окружности к ее радиусу даже не будет константой).
Так что для начала я попытался придумать хоть какое-то пространство, где Пи не равно 3.1415… Для этого я взял метрическое пространство с метрикой, в которой расстояние между двумя точками равно максимуму среди модулей разности координат (т.е. расстояние Чебышева).

Какой же вид будет иметь единичная окружность в этом пространстве? Возьмем точку с координатами (0,0) за центр этой окружности. Тогда множество точек, расстояние (в смысле заданной метрики) от которых до центра равно 1, есть 4 отрезка, параллельных осям координат, образующих квадрат со стороной 2 и с центром в нуле.

Да, в некоторой метрике это - окружность!

Посчитаем здесь Пи. Радиус равен 1, тогда диаметр, соответственно, равен 2. Можно также рассмотреть определение диаметра как наибольшего расстояния между двумя точками, но даже так оно равно 2. Осталось найти длину нашей «окружности» в данной метрике. Это сумма длин всех четырех отрезков, которые в данной метрике имеют длину max(0,2)=2. Значит, длина окружности равна 4*2=8. Ну а тогда Пи здесь равно 8/2=4. Получилось! Но нужно ли сильно радоваться? Результат этот практически бесполезен, ведь рассматриваемое пространство абсолютно абстрактно, в нем даже не определены углы и повороты. Вы можете представить себе мир, где по факту не определен поворот, и где окружностью является квадрат? Я пытался, честно, но у меня не хватило воображения.

Радиус равен 1, а вот с нахождением длины этой «окружности» есть некоторые сложности. После некоторых поисков информации в интернете, я пришел к выводу, что в псевдоевклидовом пространстве такое понятие как «число Пи» вообще не может быть определено, что, безусловно, плохо.

Если кто-нибудь в комментариях расскажет мне, как формально считать длину кривой в псевдоевклидовом пространстве, я буду очень рад, ибо моих познаний в дифференциальной геометрии, топологии (а также усердного гугления) для этого не хватило.

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

Upd. Узнал точно. Длина кривой в псевдоевклидовом пространстве может быть определена только на каком-либо его евклидовом подпространстве. То есть, в частности, для получившейся в попытке N3 «окружности» вовсе не определено такое понятие как «длина». Соответственно, Пи там тоже посчитать нельзя.

Увлеченные математикой люди по всему миру ежегодно съедают по кусочку пирога четырнадцатого марта - ведь это день числа Пи, самого известного иррационального числа. Эта дата напрямую связана с числом, первые цифры которого 3,14. Пи - это соотношение длины окружности к диаметру. Так как оно иррациональное, записать его в виде дроби невозможно. Это бесконечно длинное число. Его обнаружили тысячи лет назад и с тех пор постоянно изучают, но остались ли у Пи какие-нибудь секреты? От древнего происхождения до неопределенного будущего вот несколько наиболее интересных фактов о числе Пи.

Запоминание Пи

Рекорд в запоминании цифр после запятой принадлежит Раджвиру Мине из Индии, которому удалось запомнить 70 000 цифр - он поставил рекорд двадцать первого марта 2015 года. До этого рекордсменом был Чао Лу из Китая, которому удалось запомнить 67 890 цифр - этот рекорд был поставлен в 2005-м. Неофициальным рекордсменом является Акира Харагучи, записавший на видео свое повторение 100 000 цифр в 2005-м и не так давно опубликовавший видео, где ему удается вспомнить 117 000 цифр. Официальным рекорд стал бы только в том случае, если бы это видео было записано в присутствии представителя книги рекордов Гиннеса, а без подтверждения он остается лишь впечатляющим фактом, но не считается достижением. Энтузиасты математики любят заучивать цифру Пи. Многие люди используют различные мнемонические техники, к примеру стихи, где количество букв в каждом слове совпадает с цифрами Пи. В каждом языке существуют свои варианты подобных фраз, которые помогают запомнить как первые несколько цифр, так и целую сотню.

Существует язык Пи

Увлеченные литературой математики изобрели диалект, в котором число букв во всех словах соответствует цифрам Пи в точном порядке. Писатель Майк Кит даже написал книгу Not a Wake, которая полностью создана на языке Пи. Энтузиасты такого творчества пишут свои произведения в полном соответствии количества букв значению цифр. Это не имеет никакого прикладного применения, но является достаточно распространенным и известным явлением в кругах увлеченных ученых.

Экспоненциальный рост

Пи - это бесконечное число, поэтому люди по определению не смогут никогда установить точные цифры этого числа. Однако количество цифр после запятой сильно увеличилось со времен первого использования Пи. Еще вавилоняне им пользовались, но им было достаточно дроби в три целых и одну восьмую. Китайцы и создатели Ветхого Завета и вовсе ограничивались тройкой. К 1665 году сэр Исаак Ньютон вычислил 16 цифр Пи. К 1719 году французский математик Том Фанте де Ланьи вычислил 127 цифр. Появление компьютеров радикальным образом улучшило знания человека о Пи. С 1949 года по 1967-й количество известных человеку цифр стремительно выросло с 2037 до 500 000. Не так давно Петер Труэб, ученый из Швейцарии, смог вычислить 2,24 триллиона цифр Пи! На это потребовалось 105 дней. Разумеется, это не предел. Вполне вероятно, что с развитием технологий будет возможно установить еще более точную цифру - так как Пи бесконечно, предела точности просто не существует, и ограничить ее могут лишь технические особенности вычислительной техники.

Вычисление Пи вручную

Если вы хотите найти число самостоятельно, вы можете использовать старомодную технику - вам потребуются линейка, банка и веревка, можно также использовать транспортир и карандаш. Минус использования банки в том, что она должна быть круглой, и точность будет определяться тем, насколько хорошо человек может наматывать веревку вокруг нее. Можно нарисовать окружность транспортиром, но и это требует навыков и точности, так как неровная окружность может серьезно исказить ваши измерения. Более точный метод предполагает использование геометрии. Разделите круг на множество сегментов, как пиццу на кусочки, а потом вычислите длину прямой линии, которая превратила бы каждый сегмент в равнобедренный треугольник. Сумма сторон даст приблизительное число Пи. Чем больше сегментов вы используете, тем более точным получится число. Разумеется, в своих вычислениях вы не сможете приблизиться к результатам компьютера, тем не менее эти простые опыты позволяют более детально понять, что вообще представляет собой число Пи и каким образом оно используется в математике.

Открытие Пи

Древние вавилоняне знали о существовании числа Пи уже четыре тысячи лет назад. Вавилонские таблички исчисляют Пи как 3,125, а в египетском математическом папирусе встречается число 3,1605. В Библии число Пи дается в устаревшей длине - в локтях, а греческий математик Архимед использовал для описания Пи теорему Пифагора, геометрическое соотношение длины сторон треугольника и площади фигур внутри и снаружи кругов. Таким образом, можно с уверенностью сказать, что Пи является одним из наиболее древних математических понятий, хоть точное название данного числа и появилось относительно недавно.

Новый взгляд на Пи

Еще до того, как число Пи стали соотносить с окружностями, у математиков уже было множество способов даже для наименования этого числа. К примеру, в старинных учебниках по математике можно найти фразу на латыни, которую можно грубо перевести как «количество, которое показывает длину, когда на него умножается диаметр». Иррациональное число прославилось тогда, когда швейцарский ученый Леонард Эйлер использовал его в своих трудах по тригонометрии в 1737 году. Тем не менее греческий символ для Пи все еще не использовали - это произошло только в книге менее известного математика Уильяма Джонса. Он использовал его уже в 1706 году, но это долго оставалось без внимания. Со временем ученые приняли такое наименование, и теперь это наиболее известная версия названия, хотя прежде его называли также лудольфовым числом.

Нормальное ли число Пи?

Число Пи определенно странное, но насколько оно подчиняется нормальным математическим законам? Ученые уже разрешили многие вопросы, связанные с этим иррациональным числом, но некоторые загадки остаются. К примеру, неизвестно, насколько часто используются все цифры - цифры от 0 до 9 должны использоваться в равной пропорции. Впрочем, по первым триллионам цифр статистика прослеживается, но из-за того, что число бесконечное, доказать точно ничего невозможно. Есть и другие проблемы, которые пока ускользают от ученых. Вполне возможно, что дальнейшее развитие науки поможет пролить на них свет, но на данный момент это остается за пределами человеческого интеллекта.

Пи звучит божественно

Ученые не могут ответить на некоторые вопросы о числе Пи, тем не менее с каждым годом они все лучше понимают его суть. Уже в восемнадцатом веке была доказана иррациональность этого числа. Кроме того, было доказано, что число является трансцендентным. Это означает, что нет определенной формулы, которая позволила бы подсчитать Пи с помощью рациональных чисел.

Недовольство числом Пи

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

Одним из самых загадочных чисел, известных человечеству, безусловно, является число Π (читается - пи). В алгебре это число отражает величину соотношения длины окружности и ее диаметра. Ранее эту величину называли лудольфовым числом. Как и откуда взялось число Пи доподлинно не известно, но математики делят на 3 этапа всю историю числа Π, на древний, классический и эру цифровых компьютеров.

Число П - иррационально, то есть его нельзя представить в виде простой дроби, где числитель и знаменатель целые числа. Поэтому, такое число не имеет окончания и является периодическим. Впервые иррациональность П доказал И. Ламберт в 1761 году.

Кроме этого свойства, число П не может являться еще и корнем какого-нибудь многочлена, а потому является числом свойство, когда было доказано в 1882 году, положило конец почти сакральному спору математиков «о квадратуре круга», который продолжался на протяжении 2 500 лет.

Известно, что первым ввел обозначение этого числа британец Джонс в 1706 году. После того как появились труды Эйлера, использование такого обозначения стало общепринятым.

Чтобы детально разобраться, что такое число Пи, следует сказать, что его использование настолько широко, что трудно даже назвать область науки, в которой бы без него обходятся. Одно из самых простых и знакомых еще из школьной программы значений - это обозначение геометрического периода. Отношение длины круга к длине его диаметра является постоянной и равно 3, 14. Это значение было известно еще древнейшим математикам в Индии, Греции, Вавилоне, Египте. Наиболее ранний вариант вычисления соотношения относится к 1900 году до н. э. Более приближенное к современному значение П вычислил китайский ученый Лю Хуэй, кроме того, он изобрел и быстрый способ такого вычисления. Его величина оставалась общепринятой на протяжении почти 900 лет.

Классический период развития математики ознаменовался тем, что чтобы установить точно, что такое число Пи, ученые стали использовать методы математического анализа. В 1400-х годах индийский математик Мадхава использовал для вычисления теорию рядов и определил период числа П с точностью до 11 цифр после запятой. Первым европейцем, после Архимеда, который исследовал число П и внес значительный вклад в его обоснование, стал голландец Людольф ван Цейлен, который определил уже 15 цифр после запятой, а в завещании написал весьма занимательные слова: «…кому интересно - пусть идет дальше». Именно в честь этого ученого, число П и получило свое первое и единственное за всю историю именное название.

Эпоха компьютерных вычислений привнесла новые детали в понимание сущности числа П. Так, чтобы выяснить, что такое число Пи, в 1949 году впервые была использована вычислительная машина ЭНИАК, одним из разработчиков которой был будущий «отец» теории современных компьютеров Дж. Первое измерение велось на протяжении 70 часов и дало 2037 цифр после запятой в периоде числа П. Отметка в миллион знаков была достигнута в 1973 году. Кроме того, в этот период были установлены и другие формулы, отражающие число П. Так, братья Чудновские смогли найти такую, которая позволила вычислить 1 011 196 691 цифр периода.

Вообще следует отметить, что чтобы ответить на вопрос: "Что такое число Пи?", многие исследования стали напоминать соревнования. Сегодня уже суперкомпьютеры занимаются вопросом, какое же оно на самом деле, число Пи. интересные факты, связанные с этими исследованиями, пронизывают практически всю историю математики.

Сегодня, например, проводятся мировые чемпионаты по запоминанию числа П и фиксируются мировые рекорды, последний принадлежит китайцу Лю Чао, за сутки с небольшим, назвал 67 890 знаков. В мире есть даже праздник числа П, который отмечается как «День числа Пи».

По данным на 2011 год уже установлено 10 триллионов цифр периода числа.

С недавних пор существует элегантная формула для вычисления числа Пи, которую в 1995 году впервые опубликовали Дэвид Бэйли, Питер Борвайн и Саймон Плафф:

Казалось бы: что в ней особенного — формул для вычисления Пи великое множество: от школьного метода Монте-Карло до труднопостижимого интеграла Пуассона и формулы Франсуа Виета из позднего Средневековья. Но именно на эту формулу стоит обратить особое внимание — она позволяет вычислить n-й знак числа пи без нахождения предыдущих. За информацией о том, как это работает, а также за готовым кодом на языке C, вычисляющим 1 000 000-й знак, прошу под хабракат.

Как же работает алгоритм вычисления N-го знака Пи?
К примеру, если нам нужен 1000-й шестнадцатеричный знак числа Пи, мы домножаем всю формулу на 16^1000, тем самым обращая множитель, стоящий перед скобками, в 16^(1000-k). При возведении в степень мы используем двоичный алгоритм возведения в степень или, как будет показано в примере ниже, возведение в степень по модулю . После этого вычисляем сумму нескольких членов ряда. Причём необязательно вычислять много: по мере возрастания k 16^(N-k) быстро убывает, так что, последующие члены не будут оказывать влияния на значение искомых цифр). Вот и вся магия — гениальная и простая.

Формула Бэйли-Борвайна-Плаффа была найдена Саймоном Плаффом при помощи алгоритма PSLQ , который был в 2000 году включён в список Top 10 Algorithms of the Century . Сам же алгоритм PSLQ был в свою очередь разработан Бэйли. Вот такой мексиканский сериал про математиков.
Кстати, время работы алгоритма — O(N), использование памяти — O(log N), где N — порядковый номер искомого знака.

Думаю, уместно будет привести код на языке Си, написанный непосредственно автором алгоритма, Дэвидом Бэйли:

/* This program implements the BBP algorithm to generate a few hexadecimal digits beginning immediately after a given position id, or in other words beginning at position id + 1. On most systems using IEEE 64-bit floating- point arithmetic, this code works correctly so long as d is less than approximately 1.18 x 10^7. If 80-bit arithmetic can be employed, this limit is significantly higher. Whatever arithmetic is used, results for a given position id can be checked by repeating with id-1 or id+1, and verifying that the hex digits perfectly overlap with an offset of one, except possibly for a few trailing digits. The resulting fractions are typically accurate to at least 11 decimal digits, and to at least 9 hex digits. */ /* David H. Bailey 2006-09-08 */ #include #include int main() { double pid, s1, s2, s3, s4; double series (int m, int n); void ihex (double x, int m, char c); int id = 1000000; #define NHX 16 char chx; /* id is the digit position. Digits generated follow immediately after id. */ s1 = series (1, id); s2 = series (4, id); s3 = series (5, id); s4 = series (6, id); pid = 4. * s1 - 2. * s2 - s3 - s4; pid = pid - (int) pid + 1.; ihex (pid, NHX, chx); printf (" position = %i\n fraction = %.15f \n hex digits = %10.10s\n", id, pid, chx); } void ihex (double x, int nhx, char chx) /* This returns, in chx, the first nhx hex digits of the fraction of x. */ { int i; double y; char hx = "0123456789ABCDEF"; y = fabs (x); for (i = 0; i < nhx; i++){ y = 16. * (y - floor (y)); chx[i] = hx[(int) y]; } } double series (int m, int id) /* This routine evaluates the series sum_k 16^(id-k)/(8*k+m) using the modular exponentiation technique. */ { int k; double ak, eps, p, s, t; double expm (double x, double y); #define eps 1e-17 s = 0.; /* Sum the series up to id. */ for (k = 0; k < id; k++){ ak = 8 * k + m; p = id - k; t = expm (p, ak); s = s + t / ak; s = s - (int) s; } /* Compute a few terms where k >= id. */ for (k = id; k <= id + 100; k++){ ak = 8 * k + m; t = pow (16., (double) (id - k)) / ak; if (t < eps) break; s = s + t; s = s - (int) s; } return s; } double expm (double p, double ak) /* expm = 16^p mod ak. This routine uses the left-to-right binary exponentiation scheme. */ { int i, j; double p1, pt, r; #define ntp 25 static double tp; static int tp1 = 0; /* If this is the first call to expm, fill the power of two table tp. */ if (tp1 == 0) { tp1 = 1; tp = 1.; for (i = 1; i < ntp; i++) tp[i] = 2. * tp; } if (ak == 1.) return 0.; /* Find the greatest power of two less than or equal to p. */ for (i = 0; i < ntp; i++) if (tp[i] > p) break; pt = tp; p1 = p; r = 1.; /* Perform binary exponentiation algorithm modulo ak. */ for (j = 1; j <= i; j++){ if (p1 >= pt){ r = 16. * r; r = r - (int) (r / ak) * ak; p1 = p1 - pt; } pt = 0.5 * pt; if (pt >= 1.){ r = r * r; r = r - (int) (r / ak) * ak; } } return r; }
Какие возможности это даёт? Например: мы можем создать систему распределённых вычислений, рассчитывающую число Пи и поставить всем Хабром новый рекорд по точности вычисления (который сейчас, к слову, составляет 10 триллионов знаков после запятой). Согласно эмпирическим данным, дробная часть числа Пи представляет собой нормальную числовую последовательность (хотя доказать это достоверно ещё не удалось), а значит, последовательности цифр из него можно использовать в генерации паролей и просто случайных чисел, или в криптографических алгоритмах (например, в хэшировании). Способов применения можно найти великое множество - надо только включить фантазию.

Больше информации по теме вы можете найти в статье самого Дэвида Бэйли, где он подробно рассказывает про алгоритм и его имплементацию (pdf);

И, похоже, вы только что прочитали первую русскоязычную статью об этом алгоритме в рунете - других я найти не смог.