Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.31;
Скачать: CL | DM;

Вниз

является ли дробь переодичной?   Найти похожие ветки 

 
lak_b ©   (2002-10-11 00:58) [0]

как это попределить _математически_ хотяб.... а потом ни на пае найтиее период...))


 
MJH ©   (2002-10-11 01:14) [1]

>переодичной
>как это попределить
>хотяб.... а потом ни на пае найтиее
ты хоть русский выучи, потом уже и математику :)


 
Mystic ©   (2002-10-11 03:29) [2]

1) все числа на компьютере представляются с ограниченной точностью. Следдовательно все числа являются рациональными.

2) Всегда можно отыскать наилучшее приближение числа в виде рациональной дроби, знаменатель которой не превышает наперед заданное число.

Тогда проверить дробь на периодичность, или, что то же самое, на рациональность, можно при помощи следующего алгоритма:

А) Находим наилучшее приближение данного числа рациональной дробью, со знаменателем, не превосходящим например, 1000.

Б) Сравниваем подученное приближение с самим числом.

Таким образом, если числа совпадают с заданной точностью, то мы можем быть уверенным в том, что дробь рациональна.

Если числа не совпадают, значит или это рациональная дробь, знаменатель которой превышает 1000, либо ирациональное число.

Вот примерный исходник

procedure FloatToRational(X: Extended; var Num, Denom: Int64; MaxDenom: Int64);
var
Qs: Int64;
P, Pprev, Pnext: Int64;
Q, Qprev, Qnext: Int64;
begin
Pprev := 1;
Qprev := 0;
Pnext := Trunc(X);
Qnext := 1;
X := Frac(X);
while Qnext < MaxDenom do
begin
if X < 1E-6 then Break;
X := 1 / X;
Qs := Trunc(X);
X := Frac(X);
P := Qs * Pnext + Pprev;
Q := Qs * Qnext + Qprev;
Qprev := Qnext;
Pprev := Pnext;
Qnext := Q;
Pnext := P;
end;
Num := Pnext;
Denom := Qnext;
end;

.....................

FloatToRational(X, N, D, 1000);
if Abs(N/D - X) < 1E-12
then Label1.Caption := "Rational"
else Label1.Caption := "Not rational";



Страницы: 1 вся ветка

Текущий архив: 2002.10.31;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.009 c
1-101257
Squ
2002-10-22 07:26
2002.10.31
Бегущая строка в about box ?


3-101048
Conqueror
2002-10-09 03:56
2002.10.31
Помогите с сортировкой


1-101305
aga
2002-10-19 15:16
2002.10.31
CD-AUDIO


6-101419
Enton
2002-08-31 23:07
2002.10.31
Как проверить существование файла в интернет


7-101531
Егор
2002-08-23 15:17
2002.10.31
Как с помощью CreateProcess сделать процесс невидимым?