Задача:
k изменяется от 0 до бесконечности ((4k+1)! / [(2k)!]^2) * x^2k = =1/2*[(1-4x)^(-3/2) + (1+4x)^(-3/2)]
X принадлежит интервалу (-1/4 ; 1/4)
Найти мин. k, которое будет удовлетворять условию:
fabs(правая часть — левая часть) < 10^(-15)
Проблема в том, что прога не может найти такого числа! Как быть?
#include
#include
#include
using namespace std;
long fact(long double val)
{if (val==0) return 1;
else return (val*fact(val-1));
}
int _tmain()
{ double x, a, f;
double k = 1;
long double left = 0;
long double right = 0;
long double step =pow(0.1,15);
do
{
cout << «Vvedite x: »;
cin >> x;
}
while ((x>=0.25) || (x<=-0.25));
f = fact(2*k);
a = fact(4*k + 1) / pow(f, 2) * pow(x, 2 * k);
right = 0.5 * (pow((1/(1 — 4 * x)), 1.5) + pow((1/(1 + 4 * x)), 1.5));
do
{
left = ((4*(4*k+3)*(4*k+5)) / ((2*k+1)*(2*k+2))) * a * pow(x,2);
cout << «Left = » << left << endl;
cout << «Right = » << right << endl;
cout << «Fabs = » << (right — left) << endl;
cout << «k = » << k << endl;
a = left;
k++;
}
while (fabs(right — left) > step);
cout << «RESULTAT :»;
cout << «k = » << k-1 << endl;
cout << «right = » << right << endl;
cout << «left = » << left << endl;
system(«pause»);
return 0;
}
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
C какого у тебя k — double? Твоя функция вычисления факториала не корректна для double.
Мне кажеться или a — это и есть левая часть, а в цикле какая-то чушь считается?
В цикле не чушь считается…
Это упрощенный алгоритм(т.к. если считать вслепую уравнение, то происходит переполнение памяти, отведенной под переменную)!!!
Факториал у тебя считается только для k=1.
А вот что здесь происходит вообще не понятно.
Что ты подразумеваешь под переполнение памяти не очень понятно.
Догадываюсь, что переполнение стека, но это из-за использование рекурсии, от нее можно избавиться.
Ну раз алгоритм упрощенный, то ошибка в упрощении.
Я нашёл. PEBKAC.
gcc exception: invalid programmer detected