не могу справиться с длинными числами!

Тема в разделе "MS Visual C++", создана пользователем trec, 29 мар 2009.

  1. trec

    trec Гость

    Задача:

    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)

    Проблема в том, что прога не может найти такого числа! Как быть?

    Код (Text):
    #include <stdio.h>
    #include <iostream>
    #include <conio.h>
    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;
    }
     
Загрузка...

Поделиться этой страницей