Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.10.31;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.009 c
1-101209
Dennis S
2002-10-21 15:43
2002.10.31
Вопрос наипростейший, тока не помню как...


14-101450
still
2002-10-10 15:38
2002.10.31
Задача


1-101371
Vladislav
2002-10-21 11:51
2002.10.31
Привязка к компу.


14-101470
Anatoly Podgoretsky
2002-10-11 10:09
2002.10.31
Именинники 11 октября


14-101505
Forever
2002-10-12 11:57
2002.10.31
Базы данных под VC++





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский