Эта статья служит
продолжением, но, возможно, не завершением темы
вычисления числа пи, начатой в №8 2001 статьей
"Моделируя жизнь" и продолженной в №3 2002
статей "Пиратская тропинка к пи", причем в
обеих статьях речь шла об экзотических
проявлениях этого удивительного числа. В первой
статье, напомним, оно вычислялось с помощью
теории вероятности бросанием так называемой
"Иглы Бюффона", а во второй с помощью
соотношений взаимно простых чисел, причем обе
статьи сопровождались популярной экскурсией в
теорию вероятностей и теорию простых чисел. Те,
кто не успел достать бумажные номера журналов,
могут найти эти статьи на http://www.hardnsoft.ru/magazine.php?issue=86&article=18
и на www.arbuz.narod.ru/z_pi.html .
А еще путешествующие по Сети любители математики
могут встретиться с многочисленными
энтузиастами числа Пи, выставляющими на своих
страничках всякие чудеса, с картинками и стихами,
посвященными таинственному числу и даже клубами
любителей числа Пи. Предлагаем вашему вниманию
некоторые исторические и программные этюды,
связанные с числом Пи, а помня шутку о том, что
каждая добавленная в книгу формула вдвое
сокращает количество ее покупателей, будем
перемежать серьезные рассуждения с прогулкой по
залам виртуального клуба любителей числа Пи.
Немного истории. В Древнем
Египте площадь круга диаметром d определяли как
4*(d - d/9)2. Из приведенного выражения можно
заключить, что в то время число "пи" считали
равным дроби (16/9)2 , или 256/81, то есть пи=3.160...
В священной книге джайнизма
(одной из древнейших религий, существовавшей в
Индии и возникшей в VI веке до н.э.) имеется
указание, из которого следует что число пи в то
время принимали равным 10^0.5, или 3.162...
Древние греки Евдокс,
Гиппократ и другие сводили измерение
окружности к построению соответствующего
отрезка, а измерение круга - к построению
равновеликого квадрата. Однако, здесь их ожидали
необъяснимые (с их точки зрения) трудности.
Действительно, поскольку все построения
выполнялись с помощью циркуля и линейки, все их
попытки сводились к выражению отношения длины
окружности к диаметру (т.е. числа "пи")
рациональным числом, и поэтому заранее были
обречены на провал.
Постепенно древние ученые
поняли бесплодность подобных попыток и стали
искать другой к подход к столь важной
практической и теоретической проблеме. Так
Архимед, в III веке до нашей эры предложил в своей
работе "Измерение круга" три положения:
·
Всякий круг равновелик прямоугольному
треугольнику, катеты которого соответственно
равны длине окружности и ее радиусу
·
Площади круга относятся к квадрату, построенному
на диаметре, как 11 к 14.
·
Отношение любой окружности к ее диаметру меньше
чем 3 1/7 и больше 3 10/71
Последнее предложение Архимед
обосновал последовательным вычислением
периметров правильных вписанных и описанных
многоугольников с 6, 12, 24, 48 и 96 сторонами. Таким
образом, с одной стороны Архимед определил, что
пи=3.1419..., а с другой, он фактически создал понятие
приближенного вычисления, и определил алгоритм
приближенного вычисления числа пи.
Впоследствии, практически все
ученые древнего мира использовали аналогичный
алгоритм в своих уточнениях числа "пи". Так в
Древней Греции вскоре после Архимеда было
получено более точное приближение к числу
"пи" - 355/113. В V веке нашей эры китайским
математиком Цзу Чунчжи было найдено более точное
значение пи=3.1416927...
В первой половине XV в. н. э. в
обсерватории Улугбека, возле Самарканда,
астроном и математик ал-Каши вычислил число
"пи" с 16 десятичными знаками. Он сделал 27
удвоений числа сторон многоугольников и дошел до
многоугольника, имеющего 3*228 углов.
Или, в символах бейсика a2n=
0.5*sqr(2-2*sqr(1-an^2)), n>=3
Попробуем и мы, с помощью Visual
Basic'a посчитать этим методом значение пи.
Каждое удвоение сторон дает многоугольник, более
близкий к окружности, а начинают обычно с
шестиугольника, так как сторона его равна
радиусу описанной окружности. Итак...
Dim a1n As Double, a2n As Double, pi As
Double, i As Integer, n As Double, m As Integer
Private Sub Комманда1_Click()
qq = "c:\qqq.txt"
Open qq For Output As #1
a1n = 0.5
For i = 6 To 20
m = i - 5 ' степень 2 * 3
n = 3 * 2 ^ m ' кол. сторон
a2n = 0.5 * Sqr(2 - 2 * Sqr(1 - a1n * a1n))
pi = a2n * 2 * n
Print #1, "3*2^"; i - 5; "="; n, pi, pi -
3.14159265358979
a1n = a2n
Next i
Close qqq
End Sub
Private Sub Комманда2_Click()
End
End Sub
3*2^ 1 =
6
3,10582854123025 -3,57641123595402E-02
3*2^ 2 = 12
3,13262861328124 -8,96404030855313E-03
3*2^ 3 = 24
3,13935020304687 -2,24245054291794E-03
3*2^ 4 = 48
3,14103195089053 -5,60702699260229E-04
3*2^ 5 = 96
3,14145247228534 -1,40181304445708E-04
3*2^ 6 = 192 3,14155760791162
-3,5045678167922E-05
3*2^ 7 = 384
3,14158389214894 -8,76144085415476E-06
3*2^ 8 = 768
3,14159046323676 -2,1903530282863E-06
3*2^ 9 = 1536
3,14159210604305 -5,47546741724858E-07
3*2^ 10 = 3072
3,14159251658815 -1,37001635369671E-07
3*2^ 11 = 6144
3,14159261864079 -3,49490005824293E-08
3*2^ 12 = 12288 3,14159264532122
-8,26857426972083E-09
3*2^ 13 = 24576 3,14159264532122
-8,26857426972083E-09
3*2^ 14 = 49152 3,14159264532122
-8,26857426972083E-09
3*2^ 15 = 98304 3,14159264532122
-8,26857426972083E-09
Первый столбик показывает
число сторон вписанного многоугольника, второй -
отношение его периметра к диаметру окружности, а
третий - отклонение этого отношения от
известного значения пи. Уже на 12 шагу мы получаем
12288-угольник, который дает значение пи с
точностью до девятого знака после запятой.
Дальнейшая работа программы уточнения не дает,
это связано с возведением в квадрат и
извлечением корня из числа, объявленного как double.
Для применения метода удвоения придется искать
какие-нибудь ухищрения, атака "в лоб" дала
результаты, может, и неплохие, но по сравнению с
результатами Ал-Каши просто смехотворные. Кто
надумает, как обойти ограничения на длину числа в
Бейсике, пишите. А мы переходим в следующий
зал нашего виртуального клуба.
Христиан Крюзер, давний
любитель числа пи не только взял это число с
собой в полет, но и заставил его (наверняка не
спросив) совершить прыжок вместе с группой
парашютистов (http://www.astro.univie.ac.at/~wasi/PI/proclaiming_pi/flying_high.html
)
Он же установил памятный знак
пи на одной из высочайших вершин мира - пике
Ленина. (http://www.astro.univie.ac.at/~wasi/PI/proclaiming_pi/on_pik_lenin.html
)
Другой энтузиаст Вернер
Лехманн выложил на земле мозаику, цвета плиток в
которой соответствуют цифрам числа пи, и гордо на
ней восседает. (http://www.jvshly.de/piworld/pimosa.htm
). Вот уж кто прочувствовал цифры пи буквально
своими руками.
Вот это увлеченность, даже
завидно стало. Представляете - жизнь, наполненная
пи! Это вам не пустяки.
Да и нас, кстати, ждут еще
дела. Вспомним известный со школы способ
определения пи вписыванием в окружность
многоугольника или описыванием многоугольника
вокруг окружности. Если рассматривать отношение
периметра многоугольника к диаметру окружности,
то при увеличении числа сторон многоугольника
оно должно стремиться к пи. Причем, для
вписанного многоугольника "снизу",
увеличиваясь, а для описанного "сверху",
уменьшаясь. Особенно быстро должно приближаться
к пи среднее арифметическое этих двух встречных
приближений. Знатоки и даже троечники
согласятся, что половина стороны многоугольника,
описанного вокруг окружности с радиусом 1 равна
a=1/Sin(Fi), а половинка стороны вписанного
соответственно b=1/tan(Fi), где Fi - половинка
центрального угла, опирающегося на сторону
многоугольника. Fi=360/n/2 в градусах, или Fi=Пи/n в
радианах. С точки зрения методики "чистого"
отыскания Пи здесь не все гладко, ведь при
переводе в радианы мы используем готовое
известное значение пи, но у нас не стоит
академическая задача методологической чистоты
рассуждений, просто мы посмотрим, как быстро
"уточняется" значение пи при увеличении
числа сторон многоугольников. И вот наше
воплощение и результат его.
Dim fi As Double, pi As Double, pi1 As
Double, i As Integer, n As Double, m As Integer
Private Sub Комманда1_Click()
qq = "c:\qqq2.txt"
Open qq For Output As #1
pi = 3.14159265358979
For n = 3 To 20 Step 1
fi = pi / n
pi1 = n * (Sin(fi) + Tan(fi)) / 2
Print #1, n, n * Sin(fi), n * Tan(fi), pi1, pi1 - pi
Next n
Close #1
End Sub
Private Sub Комманда2_Click()
End
End Sub
3
2,59807621135331
5,19615242270662
3,89711431702997
0,755521663440177
4
2,82842712474619
3,99999999999999
3,41421356237309
0,2726209087833
5
2,93892626146236
3,6327126400268
3,28581945074458
0,144226797154791
6
3
3,46410161513775
3,23205080756887
9,04581539790841E-02
7
3,0371861738229
3,3710223316527
3,2041042527378
6,25115991480101E-02
8
3,06146745892072
3,31370849898476
3,18758797895274
4,59953253629459E-02
9
3,07818128993102
3,27573210839582
3,17695669916342
3,53640455736266E-02
10
3,09016994374947
3,24919696232906
3,16968345303927
2,80907994494752E-02
11
3,09905812525572
3,22989142232203
3,16447477378888
2,28821201990872E-02
12
3,10582854123025
3,21539030917347
3,16060942520186
1,90167716120677E-02
13
3,11110363573825
3,2042122194157
3,15765792757698
0,016065273987186
14
3,1152930753884
3,1954086414621
3,15535085842525
1,37582048354572E-02
15 3,11867536226639
3,18834842505033
3,15351189365836
1,19192400685675E-02
16
3,12144515225805
3,18259787807452
3,15202151516629
1,04288615764969E-02
17
3,12374180288169
3,17785075083561
3,15079627685865
9,20362326886037E-03
18
3,12566719800474
3,17388565275237
3,14977642537855
8,18377178876473E-03
19
3,12729721533394
3,17053923805149
3,14891822669271
7,32557310292492E-03
20
3,12868930080461
3,16768880649072
3,14818905364767
6,59640005787798E-03
В первом столбике число сторон
многоугольника, во втором отношение периметра
описанного многоугольника к диаметру, в третьем
то же для вписанного, в четвертом их среднее
значение, а в пятом отклонение от известных
эталонных цифр. Мы все это проделали чтобы
убедиться в том, что пи уточняется довольно
медленно - для двадцатиугольника разница
среднего значения с эталоном в третьем знаке
после десятичной точки и уменьшается она
(разница) не слишком быстро. Поэтому предпримем
отчаянный ход - будем резче, десятикратно на
каждом шаге цикла, увеличивать количество сторон
многоугольников.
Private Sub Комманда1_Click()
qq = "c:\qqq3.txt"
Open qq For Output As #1
pi = 3.14159265358979
For i = 1 To 8
n = 10 ^ i
fi = pi / n
pi1 = n * (Sin(fi) + Tan(fi)) / 2
Print #1, n, n * Sin(fi), n * Tan(fi), pi1, pi1 - pi
Next i
Close qqq
End Sub
10
3,09016994374947
3,24919696232906
3,16968345303927 2,80907994494752E-02
100
3,14107590781283
3,14262660433511
3,14185125607397 2,58602484179082E-04
1000
3,14158748587956
3,14160298905615
3,14159523746786 2,58387806661986E-06
10000
3,14159260191266
3,14159275694405
3,14159267942836 2,58385659535065E-08
100000
3,14159265307302
3,14159265462333
3,14159265384818 2,58385757234691E-10
1000000 3,14159265358462
3,14159265360013
3,14159265359237 2,58371102290766E-12
10000000 3,14159265358974
3,14159265358989
3,14159265358982 2,57571741713036E-14
100000000 3,14159265358979
3,14159265358979
3,14159265358979 0
Тут уж желаемый результат на
лицо, посмотрите, как уточнялось наше пи от
миллионного знака для тысячеугольника до
десятимиллиардного для статысячеугольника и за
пределами представления чисел двойной точности,
то есть до пятнадцатого знака после десятичной
точки для "стомиллионоугольника".
Кстати, обратите внимание на первые значащие
цифры разности найденного значения пи с
эталонным - они почти везде равны 2.5, почему бы
это? Поразмышляйте, пока будем отдыхать в
следующем зале нашего клуба.
Почитатель числа пи Экхард
Коен нанес на стекло размером 60х60 см узор,
основанный на 250 000 знаках любимого числа и
соорудил из него журнальный столик. Теперь
счастливый автор, как сказано на http://www.jvshly.de/piworld/pi_table.htm,
может наслаждаться чашкой чая, рассуждая о
фантастической красоте окружающего мира.
А еще на соседней страничке
того же любителя числа пи http://www.jvshly.de/piworld/_pisign.htm
вы можете получить персональный значок (или
подпись - pisign) выделенный из цифр числа пи на
основании ваших персональных данных - даты и
места рождения. Например, такие.
Для получения такого
персонального пи-значка всем желающим авторы
странички предлагают писать письма с личными
данными на адрес mailto:hly@jvshly.de,
вам вышлют номер счета для оплаты суммы в
размере pi3/2 = 15,00 долларов, после получения
сгенерируют ваш значок и вышлют его в виде
картинки или зип-архива.
На этой же страничке вы
найдете целую галерею изображений, полученных из
цифр числа пи, например, такое.
Этот шедевр достоин украсить
любую коллекцию абстрактной живописи, не правда
ли?
А еще любители числа пи
выложили на http://home.t-online.de/home/HAEL.YGGS/picur.htm
необычайные фотографии, подтверждающие
таинственное свойство этого числа появляться в
самых неожиданных местах, причем не только в виде
самого числа, но, самое невероятное, и в виде
символа, обозначающего это число. Например, в
виде снежных языков на склонах гор, в
перекрещивающихся ветках деревьев, в прожилках
обычных камней, в железяке для швартовки лодок и
даже в струйках воды, стекающих с рук в
умывальник!
А еще на той же страничке
приверженцы пи обнаружили в Лейпциге на улице
Rietschelstrasse таинственное яйцо с нанесенными на нем
2345 цифрами числа пи. И вместо того, чтобы искать
птицу или крокодила, снесших это чудо, они
рассуждают о том, что космические сферы не
обязательно сферические, что им больше подходит
форма яйца, вот такие чудаки. Они же, к дню
рождения Хуберта Риттера (Hubert Ritter, 1886 - 1967),
архитектора из Лейпцига, применявшего в
строительстве элементы окружностей, создали
мозаику из 1886 элементов, ячейки которой
раскрашены, вы уже догадались, по цифрам числа пи.
Приглашаю всех повнимательнее
отнестись к окружающему нас на каждом шагу
проявлению таинственного числа, фотографируйте
и присылайте в Арбузный клуб числа пи www.arbuz.narod.ru/z_piclub.htm
природные его появления или самодельные
конструкции.
Отдохнули? Движемся дальше.
После разработки методов дифференциального и
интегрального исчисления было найдено много
формул, которые содержат число "пи".
Некоторые из этих формул позволяют вычислять
"пи" приемами, отличными от метода Архимеда
и более рациональными. Так к числу "пи" можно
прийти, отыскивая пределы некоторых рядов.
Так Г.Лейбниц (1646-1716) получил в
1674г. ряд ,который дал возможность вычислить
"пи" более коротким путем, нежели Архимед.
Пи=4*(1-1/3+1/5-1/7+1/9-1/11…)
Рассмотрев внимательно
формулу найдем выражение для общего члена ряда в
скобках
an=((-1)^n)/(2*n+1), что позволит
написать несложную программу и проверить
действенность формулы:
Dim pi As Double, i As Integer
Private Sub Комманда1_Click()
qq = "c:\qdq.txt"
Open qq For Output As #1
pi = 0
For i = 0 To 100
pi = pi + ((-1) ^ i) / (2 * i + 1)
Print #1, i, 4 * pi, a1n, 4 * pi - 3.14159265358979
Next i
Close #1
End Sub
Private Sub Комманда2_Click()
End
End Sub
0
4
1
0,85840734641021
1
2,66666666666667
-0,333333333333333
-0,474925986923123
2
3,46666666666667
0,2
0,325074013076877
3
2,8952380952381
-0,142857142857143
-0,246354558351694
4
3,33968253968254
0,111111111111111
0,19808988609275
5
2,97604617604618
-9,09090909090909E-02 -0,165546477543614
6
3,28373848373848
7,69230769230769E-02 0,142145830148694
7
3,01707181707182
-6,66666666666667E-02 -0,124520836517972
8
3,25236593471888
5,88235294117647E-02 0,110773281129087
9
3,0418396189294
-5,26315789473684E-02 -9,97530346603868E-02
10
3,23231580940559
4,76190476190476E-02 9,07231558158039E-02
Прервем программу на
минуточку. Здесь выводятся: в первом столбике
номер счетчика цикла, он же номер дроби,
участвующей в расчете, во втором искомое наше пи,
в третьем значение прибавляемой на этом шаге
дроби, а в четвертом, как и ранее, разница
найденного значения пи и эталонного.
Рассмотрение процесса говорит о том, что ряд
приближается к пи до обидного медленно, так как
текущее значение дроби быстро уменьшается и
влияет на сумму рядя все слабее и слабее. Десять
шагов цикла не дали даже первую десятичную цифру.
Пропустим несколько строк.
46
3,16286684275088
0,010752688172043
2,12741891610944E-02
47
3,12076157959299
-1,05263157894737E-02 -2,08310739968005E-02
48
3,16199869299505
1,03092783505155E-02
2,04060394052612E-02
49
3,12159465259101
-1,01010101010101E-02 -0,019998000998779
50
3,16119861298705
9,9009900990099E-03 1,96059593972606E-02
51
3,12236366153074
-9,70873786407767E-03 -0,01922899205905
52
3,16045889962598
9,52380952380952E-03 1,88662460361879E-02
Пятьдесят дробей так и не дали
вторую цифру после точки... еще пропустим...
95
3,13117626945498
-5,23560209424084E-03 -1,04163841348082E-02
96
3,15190165805602
5,18134715025907E-03 1,03090044662282E-02
97
3,1313888375432
-5,12820512820513E-03 -1,02038160465923E-02
98
3,15169340607112
5,0761421319797E-03 1,01007524813266E-02
99
3,13159290355855
-5,0251256281407E-03 -9,99975003123632E-03
100
3,15149340107099
4,97512437810945E-03 9,9007474812014E-03
А вот и неутешительный
результат ста шагов программы – до второй цифры
так и не добрались. Остается утешиться мыслями о
том, что отрицательный результат тоже результат,
что интерес у нас чисто обзорно-исторический, что
хотя формула ряда и сам ряд найдены правильно, но
для быстрого нахождения пи они непригодны. Снова
отдых в следующем салоне клуба.
Если до этого мы рассматривали
картинки, мозаики и фотографии, то теперь
обратимся к жанру эпистолярному. Есть красивая
старинная и вечноактуальная задача: подумаем,
как легче запомнить значение Пи? Это можно
сделать, например, с помощью старинного
двустишья. Оно написано по правилам старой
русской орфографии, по которой после согласной в
конце слова обязательно ставился "мягкий"
или "твердый" знак. Вот оно, это двустишие:
Кто и шутя, и скоро пожелаетъ
"Пи" узнать число - ужъ знаетъ.
Количество букв в каждом слове
равно соответствующей цифре числа Пи, проверьте!
Первую тройку, естественно, отделите точкой.
А почему, собственно, мы должны
пользоваться дореволюционными стихами? Ведь это
же не сложно, написать такое стихотворение!
Причем, такое стихотворение напрямую связано с
другим проявлением математической словесности
– цифровыми стихами, подробнее о них смотрите
альманах «Полторы трубы» на www.arbuz.narod.ru/z_truba.htm
Попробуйте сочинить, увлекательное занятие, и
присылайте, размещу в клубе, прославитесь.
А вот (http://www.go2net.com/useless/useless/pi.html
)варианты на английском: "How I want a drink, alcoholic of
course, after the heavy lectures involving quantum mechanics!", тоже
количество букв равно цифрам пи, но перевод с
педагогической точки зрения весьма сомнителен. Иеще:
Now
I even I
Would celebrate
In rhymes unapt
The great immortal Syracusan
Rivaled nevermore
Who in his wondrous lore
Passed on before
Gave men his guidance
How to circles mensurate
А вот созвучное ему тоже про Сиракузы
стихотворение С. Боброва (http://mathem-poem.narod.ru/nach/chisla/3cif.htm
) не мнемоническое, но тоже с запоминанием цифр
числа Пи:
Гордый Рим трубил победу
Над твердыней Сиракуз;
Но трудами Архимеда
Много больше я горжусь.
Надо нынче нам заняться,
Оказать старинке честь,
Чтобы нам не ошибаться,
Чтоб окружность верно счесть,
Надо только постараться
И запомнить все как есть
Три - четырнадцать -
пятнадцать - девяносто два и шесть!
И еще стихотворение с
присутствием Пи, наверняка известное читателям,
из Алисы в переводе Б. Заходера:
Математик и Козлик
Делили пирог.
Козлик скромно сказал:
- Раздели его вдоль!
- Тривиально! - сказал Математик.
- Позволь,
Я уж лучше
Его разделю поперек!
- Первым он ухватил
Первый кус пирога.
Но не плачьте,
Был тут же наказан порок:
"Пи" досталось ему
(А какой в этом прок?!)
А Козленку...
Козленку достались
Рога!
Лежит этот стишок на http://www.weekend.ru/print.cfm?publication=4444
, прекрасной странице, посвященной Пи. На ней мы
узнаем, например, что на http://www.hut.fi/~mnippula/votepi.html
проводилось голосование на тему: чему должно
быть равно число Пи в будущем? Большинством
голосом решено, что Пи=42. Вот так полагаться на
большинство.
Удивительная волшебница Ева
Андерссон из Калифорнии, девушка с зеленым лицом
и рожками-антенами (у многих ли хватит смелости и
чувства юмора выложить себя в таком виде,
смотрите http://www.ugcs.caltech.edu/~eveander/index.html
) разработала викторину, посвященную числу Пи.
Если вы не сможете ответить на 25 тестов, то
получите, если знаете английский, познавательные
ответы на них. Но, главное, Ева написала поэму,
посвященную числам Пи и е, вот ее начало.
There once was a number named pi
Who frequently liked to get high.
All he did every day
Was sit in his room and play
With his imaginary friend named i.
Дословный перевод весьма
сомнителен (get high - жаргонное "тащиться",
ширяться, балдеть от наркоты, может, поэтому у нее
зеленое лицо?) поэтому предлагаю умеренный
лимерик:
В числовой бесконечной степи
Жило всеми любимое Пи
Чтоб быть больше букашки
Пропускало рюмашку
С ним дружило лишь мнимое i
Отдохнули? Снова труба зовет в
бой. Среди многочисленных задач, связанных с
числом пи одна из самых красивых, можно сказать,
этюдная, нахождение двух целых чисел, частное от
деления которых дает приближенное значение пи. В
продолжение известных с глубокой древности пар
чисел 22/7 и 355/113. Последнее дает значение, равное
3,14159292035398230088495575221239 на редкость точное,
отличается от эталона «аж» с седьмого знака, что
превосходит результат многих более крупных пар
чисел. Любители фатальных закономерности
могут на http://www.ihep.su/~kovalev/lasers.html
ознакомиться с невероятной связью числа 113 не
только с числом пи, но и с катастрофами и
расписаниями электричек.
Итак, мы хотим отыскать пару
чисел, которые при делении друг на друга дают пи.
Открываем два цикла – внешний, от 10 (предположим,
это не так важно) до верхнего выбранного предела,
например, до 10 000 000 как в приведенном листинге
программы. И внутренний цикл, проверка делителей
для каждого числа внешнего цикла. И вот тут можно
предложить интересный оптимизирующий прием –
внутренний цикл проделывать в пределах чисел, не
намного отличающихся от деления числа внешнего
цикла на приближенное значение пи. Это намного
сократит количество проверяемых вариантов, хотя,
возможно, не исключен риск «потерять» какое-либо
интересное решение. Пределы внешнего цикла,
границы внутреннего и точность поиска
подбираются при отладке, предлагаем вариант,
находящий пары чисел, дающие при делении друг на
друга число пи с точностью до 12 знака после
десятичной точки.
Dim a As Double, b As Double, pi As
Double, pipi As Double
Private Sub Eiiiaiaa1_Click()
qq = "d:\qqq1q.txt"
Open qq For Output As #1
pi = 3.14159265358979
For a = 10 To 10000000
b1 = Int(a / 3.142)
b2 = Int(a / 3.141)
For b = b1 To b2
pipi = a / b
If Abs(pi - pipi) < 0.0000000001 Then Print
#1, a, b, Abs(pipi - pi)
Next b
Next a
Print
"*********************************************************************"
Close #1
End Sub
Private Sub Eiiiaiaa2_Click()
End
End Sub
833719
265381 8,71214211883853E-12
1146408
364913 1,61382018859513E-12
1459097
464445 7,51443351987291E-12
1667438
530762 8,71214211883853E-12
1980127
630294 2,73381317583699E-12
2292816
729826 1,61382018859513E-12
2501157
796143 8,71214211883853E-12
2605505
829358 4,91828799908944E-12
2813846
895675 4,50528503392889E-12
2918194
928890 7,51443351987291E-12
3126535
995207 1,13953291247526E-12
3230883
1028422 9,6078700551061E-12
3334876
1061524 8,71214211883853E-12
3439224
1094739 1,61382018859513E-12
3647565
1161056 5,46673817325427E-12
3751913
1194271 3,9084291358904E-12
3960254
1260588 2,73381317583699E-12
4064602
1293803 5,84998716135487E-12
4168595
1326905 8,71214211883853E-12
4272943
1360120 4,01012556494607E-13
4377291
1393335 7,51443351987291E-12
4481284
1426437 6,07069949865036E-12
4585632
1459652 1,61382018859513E-12
4689980
1492867 8,95639118425606E-12
4793973
1525969 3,77342601609598E-12
4898321
1559184 3,37152528118168E-12
5002314
1592286 8,71214211883853E-12
5106662
1625501 1,75770509258655E-12
5211010
1658716 4,91828799908944E-12
5315003
1691818 6,48503473144046E-12
5419351
1725033 2,53130849614536E-14
5523699
1758248 6,28963547910644E-12
5627692
1791350 4,50528503392889E-12
5732040
1824565 1,61382018859513E-12
5836033
1857667 8,71214211883853E-12
5836388
1857780 7,51443351987291E-12
5940381
1890882 2,73381317583699E-12
6044729
1924097 3,03801428458428E-12
6148722
1957199 6,78701539413851E-12
6149077
1957312 8,61444249267151E-12
6253070
1990414 1,13953291247526E-12
6357418
2023629 4,32232027947066E-12
6461411
2056731 5,04796204836566E-12
6461766
2056844 9,6078700551061E-12
6565759
2089946 3,02868841117743E-13
6669752
2123048 8,71214211883853E-12
6670107
2123161 5,48627809848767E-12
6774100
2156263 3,46966899655854E-12
6878448
2189478 1,61382018859513E-12
6982441
2222580 7,01705360484084E-12
6982796
2222693 6,54543086398007E-12
7086789
2255795 2,03037586743449E-12
7191137
2289010 2,8110846983509E-12
7295130
2322112 5,46673817325427E-12
7295485
2322225 7,51443351987291E-12
7399478
2355327 7,13207271019201E-13
7503471
2388429 8,71214211883853E-12
7503826
2388542 3,9084291358904E-12
7607819
2421644 4,04432043410452E-12
7608174
2421757 8,40350011799273E-12
7712167
2454859 4,9782400424192E-13
7816160
2487961 7,19779791324981E-12
7816515
2488074 4,91828799908944E-12
7920508
2521176 2,73381317583699E-12
7920863
2521289 9,22240062095625E-12
8024856
2554391 1,61382018859513E-12
8128849
2587493 5,79980508064182E-12
8129204
2587606 5,84998716135487E-12
8233197
2620708 1,52322598978571E-12
8233552
2620821 9,97912863454076E-12
8337190
2653810 8,71214211883853E-12
8337545
2653923 2,64632760149652E-12
8441538
2687025 4,50528503392889E-12
8441893
2687138 6,71285249609355E-12
8545886
2720240 4,01012556494607E-13
8649879
2753342 7,34345917408064E-12
8650234
2753455 3,60467211635296E-12
8754227
2786557 3,30313554286477E-12
8754582
2786670 7,51443351987291E-12
8858575
2819772 6,42152997443191E-13
8962568
2852874 6,07069949865036E-12
8962923
2852987 4,49551507131218E-12
9066916
2886089 2,18403073404261E-12
9067271
2886202 8,26050339242101E-12
9170909
2919191 8,71214211883853E-12
9171264
2919304 1,61382018859513E-12
9275257
2952406 4,88320495151129E-12
9275612
2952519 5,32640598294165E-12
9379605
2985621 1,13953291247526E-12
9379960
2985734 8,95639118425606E-12
9483598
3018723 7,46380734995E-12
9483953
3018836 2,52153853352866E-12
9587946
3051938 3,77342601609598E-12
9588301
3052051 6,10356210017926E-12
9691939
3085040 9,93383153513605E-12
9692294
3085153 1,62536650805123E-13
9692649
3085266 9,6078700551061E-12
9796287
3118255 6,29540863883449E-12
9796642
3118368 3,37152528118168E-12
9900635
3151470 2,73381317583699E-12
9900990
3151583 6,83098022591366E-12
Заметив же среди отчетов о
точности в правом столбике значения 10-13 и
даже 10-14 модифицируем программу, ужесточив
условие вывода результата на печать (вернее, в
файл) и, соответственно, сузив границы
внутреннего цикла:
For a = 10 To 10000000
b1 = Int(a / 3.1416)
b2 = Int(a / 3.1415)
For b = b1 To b2
pipi = a / b
If Abs(pi - pipi) < 0.000000000001 Then
Print #1, a, b, Abs(pipi - pi)
Next b
Next a
4272943
1360120 4,01012556494607E-13
5419351 1725033
2,53130849614536E-14
6565759
2089946 3,02868841117743E-13
7399478
2355327 7,13207271019201E-13
7712167
2454859 4,9782400424192E-13
8545886
2720240 4,01012556494607E-13
8858575 2819772
6,42152997443191E-13
9692294
3085153 1,62536650805123E-13
Мы получили 8 пар чисел в
пределах 10 000 000, дающих самые точные значения пи.
Вторая пара даже до 14 знака после точки. Причем
еще и видно, что шестая пара чисел вдвое больше
первой пары, что и объясняет одинаковый
результат. Программа работает долго – на PIII-700 с
128Мб ОЗУ в фоновом режиме считает от 10 до 30 минут.
Мой сотрудник при решении той
же задачи поиска пары чисел, дающих при делении
число пи предложил оригинальную идею. А именно –
смоделировать процесс деления чисел по аналогии
с обычным делением столбиком. Это позволяет
рассматривать делимое не целиком, а только
небольшую часть его, которую можно объявит как
переменную целого типа Integer или long. На подбор пары
чисел, дающих пи до семнадцатого знака после
точки Celeron 430 (64Мб ОЗУ) затратил около суток, с
результатами можно ознакомиться на www.pageofmax.narod.ru/pi.htm . Они
сведены в таблицу, в которой видны «нарастающие»
результаты работы программы.
число совпадающих цифр |
делимое |
делитель |
частное |
5 |
333 |
106 |
3.1415 |
7 |
355 |
113 |
3.141592 |
8 |
86 953 |
27 678 |
3.1415926 |
9 |
102 928 |
32 763 |
3.14159265 |
10 |
103 993 |
33 102 |
3.141592653 |
11 |
521 030 |
165 849 |
3.1415926535 |
12 |
833 719 |
265 381 |
3.14159265358 |
13 |
4 272 943 |
1 360 120 |
3.141592653589 |
14 |
20 530 996 |
6 535 219 |
3.1415926535897 |
15 |
74 724 506 |
23 785 549 |
3.14159265358979 |
16 |
165 707 065 |
52 746 197 |
3.141592653589793 |
17 |
411 557 987 |
131 002 976 |
3.1415926535897932 |
Все, больше не будем
ничего вычислять. Просто, для особенно
любознательных, напомним, что хронология
уточнения пи в компьютерную эпоху согласно http://www-groups.dcs.st-and.ac.uk/~history/HistTopics/Pi_chronology.html
выглядит таким образом:
1949 год- 2037 десятичных знаков
(Джон фон Нейман, ENIAC),
1958 год- 10000 десятичных знаков (Ф.Женюи, IBM-704),
1961 год- 100000 десятичных знаков (Д.Шенкс, IBM-7090),
1973 год- 10000000 десятичных знаков (Ж.Гийу, М.Буйе,
CDC-7600),
1986 год- 29360000 десятичных знаков (Д.Бейли, Cray-2),
1987 год- 134217000 десятичных знаков (Т.Канада, NEC SX2),
1989 год- 1011196691 десятичных знаков (Д.Чудновски и
Г.Чудновски, Cray-2+IBM-3040)
Они же добились в 1991 году 2260000000 знаков, а в 1994 году
- 4044000000 знаков. Дальнейшие рекорды принадлежат
японцу Тамуре Канада: в 1995 году 4294967286 знаков, в 1997
- 51539600000, и, последний на сегодня рекорд 206.158.430.000
знаков. Суперкомпьютер (проект HINTS -
High-performance Numerical Tools & Software для сверхмощных
научных и инженерных вычислений http://www.hints.org/HINTSw.html) в
сентябре 1999 года работал 37 часов 21 минуту 4
секунды используя 865 Гигабайт памяти для
основной задачи и 46 часов, 816 Гигабайт для
вспомогательной оптимизации вычислений.
Подробнее на http://pw1.netcom.com/~hjsmith/Pi/Rec206.html
В Сети много страниц,
посвященных вычислению Пи, отметим лишь, что на http://www.cs.unb.ca/~alopez-o/math-faq/mathtext/node12.html
расположена программа, написанная Диком Т.
Винтером (Dik T. Winter at CWI) на Си всего 160-ю символами,
но вычисляющая 800 знаков Пи!
int
a=10000,b,c=2800,d,e,f[2801],g;main(){for(;b-c;)f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)for(b=c;d+=f[b]*a,
f[b]=d%--g,d/=g--,--b;d*=b);}
К экзотическим методам
вычисления пи вроде использования теории
вероятности или простых чисел принадлежит и
метод, придуманный Г.А. Гальпериным, и называемый
Пи-биллиардом, который основан на оригинальной
модели. При столкновении двух шаров, меньший из
которых находится между большим и стенкой, и
больший движется к стенке, число соударений
шаров позволяет вычислить Пи со сколь угодно
большой наперед заданной точностью. Надо только
запустить процесс (можно и на компьютере) и
посчитать число ударов шаров. Программная
реализация этой модели пока не известна, может,
кто-то из читателей проявит инициативу.
Подробное описание метода с обоснованием его
смотрите на http://phys.web.ru/db/msg.html?mid=1161679&uri=pi.html
Интересные данные о
распределении цифр Пи.
В первых 200,000,000,000 десятичных
знаках Пи цифры встречались с такой частотой:
'0' : 20000030841;
'1' : 19999914711;
'2' : 20000136978;
'3' : 20000069393
'4' : 19999921691;
'5' : 19999917053;
'6' : 19999881515;
'7' : 19999967594
'8' : 20000291044;
'9' : 19999869180;
То есть цифры распределены почти равномерно.
Поразмышляйте об этом.
И еще, как мы уже говорили, в
цифрах числа Пи можно ожидать появление любой
наперед заданной последовательности цифр.
Например, самые распространенные расстановки
встретились в следующих по счету цифрах:
01234567891 : с 26,852,899,245
01234567891 : с 41,952,536,161
01234567891 : с 99,972,955,571
01234567891 : с 102,081,851,717
01234567891 : с 171,257,652,369
01234567890 : с 53,217,681,704
27182818284 : с 45,111,908,393 - это цифры числа е. (Была такая
шутка: ученые нашли последнее число в записи Пи -
им оказалось число е, почти попали)
Попробуйте поискать в первых
десяти тысячах знаков Пи свой телефон или дату
рождения, если не получится, то ищите в 100.000
знаков.
В числе 1/Пи начиная с
55,172,085,586 знака идут 3333333333333, не правда ли
удивительно?
На http://www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/fibpi.html
лежит статья о связи чисел Фибоначчи с числом Пи.
Страница http://www.algonet.se/~eliasb/pi/binpi.html
посвящена представлению цифр числа Пи в двоичной
форме. Там же можно найти невероятные картины,
сформированные этими двоичными числами.
Напоследок хотелось бы
напомнить, что 14 марта объявлено международным
«Днем числа пи», так как в американской записи
дата запишется как 3.14. Не забудьте поздравить
знакомых, ведь этот праздник самый естественный,
общечеловеческий и даже общегалактический, не
связанный с религией или местными традициями
отдельных стран. Если же вы его пропустили по
рассеянности – не огорчайтесь, есть еще «День
приближенного пи», естественно 22 июля, не
забудьте провозгласить тост за клуб любителей пи