Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var iter, max_iter: longint; // Длина ряда и максимальная длина ряда
- var multiplyer, sign, tmp1, tmp2, tmp_iter: longint;
- var pi, pi_calc: real;
- begin
- pi := 3.1415926535897932; // Настоящее значение пи для сравнения.
- max_iter := 1;
- while (trunc(pi_calc*10000) <> trunc(pi*10000)) do begin // Это, опять же, в теории должно сработать, но...
- // У паскаля свои ограничения на Longint + этот метод невероятно неэффективный и медленный.
- // По - моему он даже хуже первого метода (честно, не ожидал этого от такого сложного ряда.
- // Думал он за 9 итераций сделает 4 знака после запятой или что - то в этом роде.)
- // Тестировать можно так же, как и прошлые пункты.
- max_iter := max_iter+1;
- pi_calc := 1;
- multiplyer := 5; // Начнём со 2 члена для удобства (со 2 члена начинает видеться закономерность),
- // так что от max_iter, для более аккуратного значения, надо отнять 1. Выше я уже добавил к pi_calc первый пропущенный член.
- sign := -1; // Так как знак там осциллируется, введем для него отдельную переменную.
- for iter:=1 to max_iter-1 do begin
- tmp1 := 1; // Временные значения для числителя и знаминателя дроби, которая будет возводиться в квадрат.
- tmp2 := 1;
- for tmp_iter := 1 to iter do begin
- tmp1 := tmp1*(tmp_iter*2-1);
- tmp2 := tmp2*(tmp_iter*2);
- end;
- pi_calc := pi_calc + sign*multiplyer*(tmp1/tmp2)*(tmp1/tmp2)*(tmp1/tmp2);
- sign := sign*-1; // Что бы оно осциллировало
- multiplyer := multiplyer + 4; // Видно из закономерности.
- end;
- pi_calc := 2/(pi_calc); // Конечные вычисления.
- end;
- writeln(max_iter);
- end.
Add Comment
Please, Sign In to add comment