Показать сообщение отдельно
  #8  
Старый 28.11.2011, 07:30
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Для Лейбница и Эллера у меня получился вот такой код:

Код:
function TForm1.PI_leib(e: Extended; var Cnt : Integer): Extended;
var
  I : Integer;
  Sng : Integer;
  dx : Extended;
begin
  Cnt := 0;
  I := 1;
  Sng := 1;
  dx := 1;
  Result := 0;

  While Abs(dx) > Abs(e) Do
    Begin
      Result := Result + dx;
      Inc(Cnt);

      Inc(I,2);
      Sng := Sng * (-1);

      dx := Sng/I;
    End;

  Result := Result * 4;
end;

function TForm1.PI_eiler(e: Extended; var Cnt : Integer): Extended;
var
  I : Integer;
  dx : Extended;
begin
  Cnt := 0;
  Result := 0;
  I := 1;
  dx := 1;
  While Abs(dx) > Abs(e) Do
    Begin
      Result := Result + dx;
      Inc(Cnt);

      Inc(I);
      dx := 1/Sqr(I);
    End;

  Result := Sqrt(Result*6);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Cnt : Integer;
  P : Extended;
begin
  P := PI_leib(0.000001,Cnt);
  //P := PI_eiler(0.000001,Cnt);
  ShowMessage(Format('Pi = %.6f; %d steps.',[P,Cnt]));
end;

Последняя процка - просто пример вызова с выводом результата.
Чем выше задашь точность (чем меньше значение е), тем точнее считает. Только вот кол-во итераций получается большим...
Ответить с цитированием