codice:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define PI 3.141596
//Programma per la risoluzione di equazione cubica /*
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,A,B,theta,k,w,t;
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 p;q;delta//
p = (3*a*c - b_sq)/(3*a_sq);
q = (2*b_cub - 9*a*b*c + 27*a_sq*d)/(27*a_cub);
printf("p = %f",p);
if(p < 0) // tre soluzioni reali
{
A = 2*sqrt(-p/3);
B = -b/3*a;
t = (3*q)/(A*p);
theta = (acos(t));
k = theta + 2*PI;
w = theta + 4*PI;
x1 = A*cos(theta/3) + B;
x2 = A*cos(k/3) +B;
x3 = A*cos(w/3) + B;
printf("\nA = %f",A );
printf("\ntheta = %f",theta);
printf("\nx1 = %f\nx2 = %f\nx3 = %f",x1,x2,x3);
}
else if (p > 0) //una soluzione reale
{
A = 2*sqrt(p/3);
t = (3*q)/(A*p);
theta = asinh(t);
x1 = (-A)*sinh(theta/3);
printf("\nA = %f",A );
printf("\ntheta = %f",theta);
printf("\nx1 = %f",x1);
}
return 0;
}
In pratica il programma funziona ma i risultati stampati non sono sempre corretti.