|
Вопрос # 2 221/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
У меня вопрос: как можно самостоятельно вычислить число Pi до N знаков после запятой?)
Заранее спасибо!
 |
Вопрос задал: IlluminatI (статус: 2-ой класс)
Вопрос отправлен: 21 декабря 2008, 19:45
Состояние вопроса: открыт, ответов: 3.
|
Ответ #1. Отвечает эксперт: Ученый
Здравствуйте, IlluminatI! Пошарился и нашел вот такой примерчик (в приложении):
Приложение: Переключить в обычный режим-
-
- unit pi_;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls;
-
- type
- TForm1 = class(TForm)
-
-
- Label1: TLabel;
-
- procedure Button1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.DFM}
-
- procedure TForm1.Button1Click(Sender: TObject);
-
- var
-
-
-
-
-
- begin
- pi:=0;
- n:=1;
- t:=StrToFloat(edit1.text);
-
- while elem >= t do
- begin
- elem:=1/(2*n-1);
- if n MOD 2 = 0
- then pi:=pi-elem
- else pi:=pi+elem;
- n:=n+1;
- end;
- pi:=pi*4;
-
-
- end;
-
- end.
 |
Ответ отправил: Ученый (статус: 8-ой класс)
Время отправки: 21 декабря 2008, 20:02
|
Ответ #2. Отвечает эксперт: Градов Ю.М.
Здравствуйте, IlluminatI!
uses ..........., Math;
var p: double;
const n=5; //задаете точность
begin
p:=Arctan(1) * 4;
Label1.Caption:=FloatToStr(p);
if n<16 then p:=Int(p*Power(10,n))/Power(10,n);
Label2.Caption:=FloatToStr(p);
// все равно процессор позволяет работать максимум с 16 десятичными разрядами
end;
 |
Ответ отправил: Градов Ю.М. (статус: 8-ой класс)
Время отправки: 22 декабря 2008, 12:03
|
Ответ #3. Отвечает эксперт: Николай Рубан
Здравствуйте, IlluminatI!
Осмелюсь предложить и свой вариант решения. Возможно он не так точен как хотелось бы, но дает возможность найти значение дроби с заданной точностью N. Осталось только найти дробь которая максимально близко выражает число ПИ. Алгоритм основан на классическом делении в столбик.
var i,a,b,c,n:integer;
begin
a:=355; b:=113; //дробь значение которой близко к значению ПИ.
n:=100; //точность
write(a div b,'.');
a:=a mod b;
for i:=1 to n do begin
a:=a*10;
c:=a div b;
if c>0
then begin write(c);a:=a mod b;end
else write(0);
end;
end.
Good Luck!
 |
Ответ отправил: Николай Рубан (статус: 10-ый класс)
Время отправки: 23 декабря 2008, 00:17
|
Мини-форум вопроса
Всего сообщений: 7; последнее сообщение — 22 декабря 2008, 18:49; участников в обсуждении: 3.
|
IlluminatI (статус: 2-ой класс), 21 декабря 2008, 22:11 [#1]:
хм, написал, при любом значении алгоритм получает Pi = 0
|
|
Николай Рубан (статус: 10-ый класс), 22 декабря 2008, 17:08 [#2]:
Что-то ни в одном из приведенных примеров нет ответа!
В первом ответе - насколько я понимаю в переменной t хранится точность, но как задать точность скажем в 100 знаков так и не понятно - тип REAL не поддерживает такую точность.
Во втором ответе аналогично..., точность ограничена типом!!!
Так, что НИ одного верного ответа НЕТ!
Я считаю, что данную задачу нужно решать как-то путем алгебраических преобразований (на подобие длинной арифметики), сам к сожалению пока ответа не нашел...
|
|
IlluminatI (статус: 2-ой класс), 22 декабря 2008, 17:32 [#3]:
спс Градов Ю.М., а после 16 знаков значит уже никак не вычсислить?
|
|
IlluminatI (статус: 2-ой класс), 22 декабря 2008, 17:33 [#4]:
во 2 алгоритме число находится, но только до 16 ЗНАКОВ, т.е получается 14 знаков после запятой(
|
|
Вадим К (статус: Академик), 22 декабря 2008, 18:01 [#5]:
попробуйте вместо real использовать Exteded. (вроде правильно написал имя типа)
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Николай Рубан (статус: 10-ый класс), 22 декабря 2008, 18:32 [#6]:
To Вадим К:
Не совсем верно, букву одну пропустили... - Extended.
Но все равно данный тип не решает задачи в общем виде...
|
|
Вадим К (статус: Академик), 22 декабря 2008, 18:49 [#7]:
Я же так и писал. А в общем - надо искать исходники программы prime - хотя там и на си, но считает и по миллиону
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|