Народ, помогите разобраться! Пытаюсь решить кубическое уравнение 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;
}
Большая просьба к людям, которые дружат с математикой указать мне на ошибку.