Известно, что дробь 355/113 представляет число пи с абсолютной погрешностью менее 1E-6.
Интересует вот что: как представить иррациональное число x дробью m/n с абсолютной погрешностью не выше e, при этом должен соблюдаться min(m+n).
Ведь все-таки 355/113 и 3141592/1000000 — оба представляют пи с погрушностью менее 1E-6, а разница заметна.
Можно ли обойтись без полного перебора m (или n)?
Re: 355/113 и число пи
От:
Аноним
Дата:
13.02.03 11:04
Оценка:
Здравствуйте, RS, Вы писали:
RS>Известно, что дробь 355/113 представляет число пи с абсолютной погрешностью менее 1E-6. RS>Интересует вот что: как представить иррациональное число x дробью m/n с абсолютной погрешностью не выше e, при этом должен соблюдаться min(m+n). RS>Ведь все-таки 355/113 и 3141592/1000000 — оба представляют пи с погрушностью менее 1E-6, а разница заметна. RS>Можно ли обойтись без полного перебора m (или n)?
void ratio(double d,double e,int& n, int& m)
{
for(int sum=2;;sum++)
for(int n=1;n<sum;n++)
{
m=sum-n;
if(fabs(d-1.0*n/m)<e)
return;
}
}
А>
Благодарю, я бы и сам... Все таки, можно ли без последовательного перебора?
Хотя бы для частных случаев x (меня интересует само пи, а также логарифм 3 по основанию 2)
Здравствуйте, RS, Вы писали:
RS>Здравствуйте, Аноним, Вы писали:
Когда-то в "Науке и Жизни" видел программку для калькулятора B3-34, — замена десятичной дроби обычной. Для Pi она выдавала при первой итерации 10/3, при второй — 22/7, при третьей — 355/113.. Номер не помню
Примерно за 1987-1989 года.
Здравствуйте, RS, Вы писали:
RS>Известно, что дробь 355/113 представляет число пи с абсолютной погрешностью менее 1E-6. RS>Интересует вот что: как представить иррациональное число x дробью m/n с абсолютной погрешностью не выше e, при этом должен соблюдаться min(m+n). RS>Ведь все-таки 355/113 и 3141592/1000000 — оба представляют пи с погрушностью менее 1E-6, а разница заметна. RS>Можно ли обойтись без полного перебора m (или n)?
Здравствуйте, RS, Вы писали:
RS>Интересует вот что: как представить иррациональное число x дробью m/n с абсолютной погрешностью не выше e
И вообще мне всегда хотелось прогу, которая по введённому числу 0.886 могла бы сказать "похоже на sqrt(pi)/2". Наверное монстры всякие типа матлаба это легко делают, а вот маленькую, симпатичненькую никто не знает? Или может есть идеи,как написать?
Здравствуйте, Pushkin, Вы писали:
P>Здравствуйте, RS, Вы писали:
RS>>Интересует вот что: как представить иррациональное число x дробью m/n с абсолютной погрешностью не выше e
P>И вообще мне всегда хотелось прогу, которая по введённому числу 0.886 могла бы сказать "похоже на sqrt(pi)/2". Наверное монстры всякие типа матлаба это легко делают, а вот маленькую, симпатичненькую никто не знает? Или может есть идеи,как написать?
Составить генератор формул, в арсенале которого — числа 1..10, e, П, ф, унарные операторы 1/x, sqrt, x^2, x^3, exp, ln, sin, cos и т.п., бинарные операторы +, -, *, /.
Очевидно, формулы не должны быть чрезмерно громоздкими.
Скажем, грамматика должна быть примерно такой:
EXPR = { UNOP }[0..2] ( ARG2 { BINOP ARG2 }[0..2] )
ARG2 = { UNOP }[0..2] ARG1
ARG1 = число из ассортимента
Перебирая формулы, вычисляем их значение и заполняем таблицу, с точностью до 3 десятичных разрядов.
Записываем в файл. Радуемся.