#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define PI 3.141596
//Programma per la risoluzione di equazione cubica con formula di Cardano/*
float main()
{
float a,b,c,d,x1,x2,x3,p,q,a_sq,a_cub,b_sq,b_cub,q_sq,p_cub,delta,k,u,v,r;
printf("L'equazione è nella forma ax^3+ bx^2+ cx+ d = 0\n" );
printf("inserisci a:");
scanf("%f",&a);
printf("inserisci b:");
scanf("%f",&b);
printf("inserisci c:");
scanf("%f",&c);
printf("inserisci d:");
scanf("%f",&d);
//calcolo p e q
a_sq = pow(a,2);
a_cub = pow(a,3);
b_sq = pow(b,2);
b_cub = pow(b,3);
//calcolo delta
p = c/a-(b_sq)/(3*a_sq);
q = d/a-(b*c)/(3*a_sq) +(2*b_cub)/(27*a_cub);
q_sq = pow(q,2);
p_cub = pow(p,3);
delta = (q_sq/4 +p_cub/27);
k= sqrt(delta);
r= (-q/2);
u = pow((r+k),(float)1.0/3);
float xx=r-k; float xxs=(xx<0)?-1.0:1.0;
v = xxs*pow(abs(xx),(float)1.0/3);
/*****************/
if(delta > 0) //L'equazione ha una soluzione reale
{
x1 = u + v;
printf("\nx1 = %f",x1);
}
else if(delta == 0) //L'equazioni ha tre soluzioni reali
{
float w = pow((q/2),(float)1.0/3);
x1 = -2*w;
x2 = w;
x3 = w;
printf("\nx1 = %f\nx2 = %f\nx3 = %f",x1,x2,x3);
}
else if(delta < 0) //L'equazioni ha tre soluzioni reali
{
float t = sqrt(-delta);
float theta = atan(t/(-q/2));
float h = 2*sqrt(-p/3);
x1 = h*cos(theta/3);
x2 = h*cos((theta+2*PI)/3);
x3 = h*cos((theta+4*PI)/3);
printf("\nx1 = %f\nx2 = %f\nx3= %f\n",x1,x2,x3);
}
}
Intendo dire che ho controllato tutte le formule usate per trovare le radici dell' equazione ma non non mi sembra che ci siano errori.
Le formule le ho prese da , quando avvio il programma mi chiede di inserire i parametri ma stampa i risultati sbagliati
Per esempio: per a= -12, b=-4, c=3, d=1
mi stampa
x1 = 0.6111111
x2 = -0.3888890
x3 = -0.2222220
quando ince dovrebbe stampare x1 =0.499999 x2 =-0.5 x3=-0.3333333