| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Помогите решить задачу с длинными числами! |
| Автор: molodzo 4.3.2009, 19:52 |
| Задача: k изменяется от 0 до бесконечности ((4k+1)! / [(2k)!]^2) * x^2k = =1/2*[(1-4x)^(-3/2) + (1+4x)^(-3/2)] X принадлежит интервалу [-1/4 ; 1/4) Найти мин. k, которое будет удовлетворять условию: abs(правая часть - левая часть) < 10^(-15) Вот код(тока у меня не работает): Код: #include <iostream.h> #include <conio.h> #include <math.h> long double k,x2,x,p,p2,n,znam,znam1,znam2,p3,my_res,p4,p5,p6,p7,p8,sum1,sum2,ch,sravn; long double factorial(long double); main() { k=-1; x2=pow(1/10,15); do { my_res=1; x=-0.25; k=k+1; p=4*k+1; ch=factorial(p); p2=2*k; znam=factorial(p2); znam1=znam*znam; do { x=x+x2; if (2*k>=0) p3=pow(x,2*k); else p3=(1/(pow(x,abs(2*k)))); sum1=ch/znam1*p3; p4=1-4*x; p5=(1/(pow(p4,3/2))); p6=1+4*x; p7=(1/(pow(p6,3/2))); p8=p5+p7; sum2=0.5*p8; sravn=pow(1/10,15); } while ((x<=0.25) && (abs(sum1-sum2)>=sravn)); if(abs(sum1-sum2)<sravn) { cout<<"Sum1="<<sum1; cout<<"Sum2="<<sum2; cout<<"K="<<k; getch(); break; } else continue; } while(abs(sum1-sum2)>=sravn); getch(); } long double factorial(long double n) { if (n==1) {exit(1);} else { my_res=my_res*n; factorial(n-1); } } Помогите, пожалуйста, ее решить! |
| Автор: zim22 4.3.2009, 20:04 | ||||||
Первый раз в жизни я вижу такой способ "вычисления" факториала:
Попробуй так:
*********** Наваял код. Ты не написал с каким шагом изменяется x и к. поэтому я выставил 0.1 в 15 степени. Т.е. очень маленький шаг инкремента. Программа будет высчитывать значение лет 5.
|
| Автор: molodzo 4.3.2009, 23:22 |
| zim22, Спасибо большое! Препод на самом деле говорит, что она может целую ночь вычислять) Тока на моем компиляторе что-то прога не работает(... Можешь мне скинуть свой? |
| Автор: Anikmar 5.3.2009, 01:03 | ||
Компилятор?! |
| Автор: zim22 5.3.2009, 08:48 | ||
molodzo, а это у тебя компилируется? если да, то какие ошибки выдаёт моя прога?
|
| Автор: molodzo 5.3.2009, 09:47 |
| Вот такие ошибки: Error: name.cpp(1,2):Unable to open include file 'CMATH.h' Error: name.cpp(4,5):Qualifier 'std' is not a class or namespace name Error: name.cpp(4,7):Identifier expected Error: name.cpp(5,10):Qualifier 'std' is not a class or namespace name Error: name.cpp(5,12):Identifier expected Error: name.cpp(19,23):Call to undefined function 'pow' Error: name.cpp(30,16):Call to undefined function 'abs' Warn : name.cpp(35,2):Parameter 'argc' is never used Warn : name.cpp(35,2):Parameter 'argv' is never used Даже не знаю,что делать... |
| Автор: zim22 5.3.2009, 10:59 | ||
molodzo, так попробуй
|
| Автор: molodzo 5.3.2009, 18:50 |
| Теперь программа начинает работу, но сразу же пишет в досе pow: DOMAIN error А как она у тебя работает? |
| Автор: zim22 5.3.2009, 19:30 | ||||||||
| molodzo, прежде чем задавать вопрос, погугли что-ли. The pow functions compute x raised to the power y. A domain error occurs if x is finite and negative and y is finite and not an integer value. A domain error may occur if x is zero and y is less than or equal to zero. A range error may occur. Поменяй значения, посмотри как прога с ними работает. У меня выдаёт 43.00000. это
поменяй на это:
а это:
на это:
|
| Автор: molodzo 8.3.2009, 15:05 |
| Ребят! Наконец-то установил C++ Builder 2007! Теперь прога ошибок не выдает! Однако, рез-т тоже не появляется... пробовал добавить в код: Form1->Edit1->Text=k; но он ее не распознает k! А если сделать K глобальной переменной, то выводит 1... как быть? |
| Автор: zim22 8.3.2009, 19:21 |
| molodzo, если у вас есть вопросы по Builder - обращайтесь в соотв.раздел форума http://forum.vingrad.ru/forum/borland-c++builder.html |