Решение кубического уравнения на C++
От: Аноним  
Дата: 29.05.05 19:13
Оценка:
Народ, помогите разобраться! Пытаюсь решить кубическое уравнение x^3+x^2+x+1 методом Кардано.
Формулы взял вот тут: http://algolist.manual.ru/maths/findroot/cubic.php
Единственный вещественный корень этого уравнения (комплексные не вычисляю) равен -1.
А программа выдает почему-то -1.244
То ли формулы неправильные, то ли с головой у меня что-то... никак не пойму


#include <iostream>
#include <tchar.h>
#include <conio.h>
#include <math.h>
#include <iomanip>

using namespace std;

int sign(long double);

const long double a=1.0, b=1.0, c=1.0;
long double Q, R, A, B, x1;
int main()
{
    cout<<setprecision(10);
    Q=(pow(a, 2)-3*b)/9;
             R=(2*pow(a, 3)-9*a*b+27*c)/54;
    if(pow(R, 2)<pow(Q, 3))
    {
        cout<<"Real roots.\n";
    }
    else
    {
        cout<<"Complex roots.\n";
        A=-sign(R)*pow((long double)(fabs(R)+sqrt(pow(R, 2)-pow(Q, 3))), (long double)1/3);
        x1=(A+B)-a/3;
        cout<<x1<<endl;
    }
    getch();
    return 0;
}

int sign(long double ld)
{
    if(fabs(ld)<0.00000000001) return 0;
    return (ld>0)?1:-1;
}

Большая просьба к людям, которые дружат с математикой указать мне на ошибку.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.