codice:
#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);
}

}
Ho scritto un programma per risolvere le equazioni cubiche, il programma viene avviato e funziona però stampa i risultati sbagliati e non riesco a capire dove possa essere l'errore. Ho controllato le formule del "delta" delle radici dell' equazione ma non mi sembra ci siano errori.
le formule le ho prese da qui: https://it.wikipedia.org/wiki/Equazione_di_terzo_grado