Задача вычислить коэфициенты Котеса ответ вывести в виде таблицы рациональных дробей.
За алгоритм вычисления интеграла взял метод средних прямоугольников. Все действия (+ - * /) происходит в рац. дробях (в виде дроби исп. структура). Только вот программа считает до H4,0 дальше начинает жутко тормозить... я думаю вроблема в больших дробях (числитель и знаменатель становятся БОЛЬШИМИ) Функция сокращения дробей:
struct fraction
{
int no; // числитель
int deno; // знаменатель
};
typedef struct fraction fract;
fract convert_fraction(fract f)
{
int min;
int no,deno;
int i;
if(f.no<0&&f.deno<0) // Если числитель и знаменатель отриц
{
f.no*=(-1);
f.deno*=(-1);
};
if(f.no==f.deno) // Если равны
{
f.no=1;
f.deno=1;
return f;
};
while(f.no%2==0&&f.deno%2==0) // Если оба четны искл четность
{
f.no/=2;
f.deno/=2;
};
if(fabs(f.no)<fabs(f.deno)) // Если оба не четны, находим минимум
min=fabs(f.no);
else
min=fabs(f.deno);
for(i=min;i>=3;i-=2) // От минимума до 3 перебираем нечетные делители
{
no=f.no%i;
deno=f.deno%i;
if((no==0)&&(deno==0)) // Если делится сокращаем
{
f.no/=i;
f.deno/=i;
if(fabs(f.no)<fabs(f.deno)) // Новый минимум
min=f.no;
else
min=f.deno;
i=min; // Начать с минимума
};
};
return f;
};
Как можно ускорить процесс сокращения? или есть какой либо другой метод представления в рациональных дробях?