Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2017, 00:34   #1
Dimcha
Новичок
Джуниор
 
Регистрация: 30.03.2017
Сообщений: 6
По умолчанию Описать функцию Pi(eps), вычисляющую значение числа Пи по формуле

Добрый день. Прошу помочь с заданием, нужно для получения зачета)

ЗАДАНИЕ: Описать функцию Pi(eps), вычисляющую значение числа Пи по формуле:

Pi/2 = (2*4)/(3*3) * (4*6)/(5*5) * (6*8)/(7*7) и т.д.

с произвольной точностью eps. Значение точности передать в функцию как аргумент. Обратиться с точностью 0,01; 0,001; 0,0001.
topfacts.ucoz.net - интересный и занимательный сайт.
Dimcha вне форума Ответить с цитированием
Старый 27.05.2017, 18:54   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Раньше для получения зачета читали книжки и конспекты.
Во-вторых, это не Pi/2, а Pi/4 .
Держи, двоечник.
Код:
function Pi_new(eps:extended): extended ; 
var i  pii,piX,dPi,a,b,c : extended ;
begin
    pii := 1.0 ; a:=2 ; b := 4 ; c := 3 ; piX := 1.0 ;
      repeat
        pii :=  pii * (a*b)/(c*c) ;  dPi := pii - piX ;
        a := b ; b := b + 2 ; c := c + 2 ;
        piX := pii ;
      until (Abs(dPI) < eps);
    Pi_new := pii * 4.0 ;
end;
А уж
Цитата:
Обратиться с точностью 0,01; 0,001; 0,0001.
- знания, надеюсь, позволят ?
А этот алгоритм - полное гуано, медленно сходится. Eps достигнут, а до точного значения - как до Луны на верблюдах.

Последний раз редактировалось digitalis; 27.05.2017 в 19:00.
digitalis вне форума Ответить с цитированием
Старый 27.05.2017, 23:22   #3
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
а до точного значения - как до Луны на верблюдах.
До точного значения чего? Числа Пи? Оно никогда не будет достигнуто.
Вадим Мошев вне форума Ответить с цитированием
Старый 27.05.2017, 23:39   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

То, что i-е значение отличается от i-1-го на величину < eps (а именно это считают достаточным основанием для окончания расчета) при медленной сходимости не означает, что оно и от "точного" (вычисленного с гораздо большей точностью) значения на величину < eps. Вот и в этом случае этот критерий не работает:
0,7853981634 = pi/4 ; eps = 0.001
2,0 4,0 3,0 0,8888888889 0,088889
4,0 6,0 5,0 0,8533333333 -0,035556
6,0 8,0 7,0 0,8359183673 -0,017415
8,0 10,0 9,0 0,8255983875 -0,010320
10,0 12,0 11,0 0,8187752603 -0,006823
12,0 14,0 13,0 0,8139304363 -0,004845
14,0 16,0 15,0 0,8103129677 -0,003617
16,0 18,0 17,0 0,8075091166 -0,002804
18,0 20,0 19,0 0,8052722492 -0,002237
20,0 22,0 21,0 0,8034462351 -0,001826
22,0 24,0 23,0 0,8019274331 -0,001519
24,0 26,0 25,0 0,8006443492 -0,001283
26,0 28,0 27,0 0,7995460717 -0,001098
28,0 30,0 29,0 0,7985953629 -0,000951
0,7985953629 - pi/4 = 0,013197191995...
Ну никак не получается утверждать, что мы вычислили pi/4 с точностью 0.001
Я проделал еще более сотни иттераций, а к точности 0.001 и не близко.
Алгоритм по Пифагору с удвоением числа сторон сходится намного быстрее. 9 иттераций - и отклонение 0.000001 .
Зачем студеням рекомендуют хреновые методы ? "У нас есть экскаватор, но вы, детишки, будете копать этот канал лопатами."

Последний раз редактировалось digitalis; 28.05.2017 в 00:38.
digitalis вне форума Ответить с цитированием
Старый 27.05.2017, 23:47   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
До точного значения чего? Числа Пи? Оно никогда не будет достигнуто.
Вадим, оно по этому алгоритму даже к неточному не приближается толком
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 28.05.2017, 00:35   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Ну почему же, отклонение в 0.001 получаем всего лишь ... на 197 шаге . При этом eps задана 0.000000001
ТС давно слинял (нетупой одногруппник ему за стакан сухонького [под вздохи душившей ТС-а жабы] наваял прогу), а форумские дяди ломают свои тетерихтические копья

Последний раз редактировалось digitalis; 28.05.2017 в 13:07.
digitalis вне форума Ответить с цитированием
Старый 28.05.2017, 22:49   #7
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
То, что i-е значение отличается от i-1-го на величину < eps
Я ничего не понял из вашего поста.
Что вы здесь понимаете под i-м значением?
Вадим Мошев вне форума Ответить с цитированием
Старый 28.05.2017, 23:28   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Я старался быть предельно близким к принятой терминологии. Вычисление проводим до тех пор, пока разность между вычисленным на последней иттерации значением (уж извините, i-м) и предпоследним ( i-1-м) стала меньше наперед заданной величины, после чего прекращаем - в данном случае - добавлять последующие члены в выражение. Но как видим на примере плохого, медленно сходящегося алгоритма это не гарантирует точности. Хорошо, пи мы знаем с точностью до триллиона и более знаков, можем оценить. А как быть с вычислением неизвестной функции ? Можем получить результат, очень далекий от реальности. Возможно, теория чисел знает ответ на этот вопрос, но я в универе не обучался, мы простые политехи.
Всяко вертел свой пост #6, чуть на голову не становился - не пойму, что в нем можно не понять ?
digitalis вне форума Ответить с цитированием
Старый 29.05.2017, 05:30   #9
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Спасибо, мне теперь стало всё понятно. Да, здесь всё совпадает с тем, как нас обучали. Но номер последнего члена последовательности я бы обозначил не через i, а через N, соответственно номер предпоследнего члена (N-1). Ну, и условие выхода не такое, как вы описали, а просто сравнивать последний член ряда с заданной точностью EPS, и выходить из цикла, если этот член меньше EPS. Я опираюсь на то, как нас обучали. Почему же давали такой неточный алгоритм - не знаю.
Вадим Мошев вне форума Ответить с цитированием
Старый 29.05.2017, 10:28   #10
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Ну вот, почти пришли к консексусу Остались 2 маленькие нестыковочки в наших позициях.
1. Обычно принято (у меня по крайней мере ) N обозначать общее или конечное число чего-нить, а i - переменная внутри цикла
Код:
for i := 1 to N
для меня как "Отче наш", и даже привычнее, бо молитву эту я нетвердо знаю. У кого-то в форуме даже в подписи стоит: "Переменная i - 20 лет на рынке счетчиков"
2. А вот насчет критерия достижения точности... Тут у нас школы разные. В данном алгоритме, где идет не суммирование ряда, а умножение на следующий член последовательности - эти, пардон, члены крутятся возле единицы, и мы eps будем ловить до второго пришествия. А разность двух соседних итераций - оно надежнее. Но тоже не совсем, как мы доказали в данном случае.
Надеюсь, недалеко увели топик от изначального своими глубокомыслями

Последний раз редактировалось digitalis; 29.05.2017 в 10:34.
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описать процедуру, вычисляющую корни третьей, пятой и седьмой степень числа kukobch Паскаль, Turbo Pascal, PascalABC.NET 10 05.11.2016 15:04
Две задачи в Delphi 1)Описать процедуру PowerAВ (A, B,C), вычисляющую В-тую степень числа A и возвращающую ее в.. DANE1 Помощь студентам 2 14.10.2016 13:50
Описать функцию PowerA(x,a,eps) Lena24 Помощь студентам 2 20.03.2013 15:16
Описать Функцию Палиндром для целого числа glebast Помощь студентам 2 30.12.2011 13:33