Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var iter, max_iter: longint; // Кол - во множителей и максимальное кол - во множителей
- var dividend, divisor: longint; // Для построения множителей.
- var pi, pi_calc: real;
- begin
- pi := 3.1415926535897932; // Настоящее значение пи для сравнения.
- max_iter := 1;
- while (trunc(pi_calc*100000) <> trunc(pi*100000)) do begin // В теории это должно работать,
- // пока не найдется такое кол - во множителей, которое бы дало точность в 5 знаков после запятой, но на практике
- // это займет вечность. Что бы протестировать мой код, советую просто вырезать тело цикла,
- // сделав max_iter константой с значением на ваше усмотрение.
- // Если что, методом тыка я нашёл, что что бы получить необходимую точность, необходимо как минимум 1000000 множителей.
- max_iter := max_iter+1;
- pi_calc := 2; // Начальный множитель 2, полученный из вывода формулы для пи.
- dividend := 2; // Начальные значения
- divisor := 1;
- for iter:=1 to max_iter do begin
- pi_calc := pi_calc * dividend/divisor; // Просто умножение всего, что было на следующий множитель.
- if iter mod 2 = 0 then dividend := dividend + 2 // Из условия можно заметить последовательность,
- // что если номер множителя чётный, то в следующем множителе числитель меняется на 2, а если нечётный,
- // то в следующем множителе уже знаменатель меняется на 2
- else divisor := divisor + 2;
- end;
- end;
- writeln(max_iter);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement