Author Topic: Cubic equation program not giving me right answers  (Read 2603 times)

A Bit of Fruit

  • loves threads ALL ABOUT HIM!!
  • Jackass V
  • Posts: 1191
  • Karma: +111/-55
  • Frontier Psychiatrist
Cubic equation program not giving me right answers
« on: August 23, 2006, 05:06:35 AM »
For some reason my code wont give me the right roots. Whats wrong?
Code: [Select]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define pi 3.14159265

int sign(float s);

int main()
{
float a1, a2, a3, x1, x2, x3, s, q, th, s_sq, q_cub, a1_sq, a1_cub, s_abs;


printf("The cubic equation has the form x^3 + a1x^2 + a2x + a3 = 0\n");

printf("Enter a1: ");
scanf("%f", &a1);

printf("\nEnter a2: ");
scanf("%f", &a2);

printf("\nEnter a3: ");
scanf("%f", &a3);

a1_cub = pow(a1, 3);
a1_sq = pow(a1, 2);

/* calculate q and s */

q = ( a1_sq - (3 * a2) ) / 9;

s = ( (2 * a1_cub) - (9 * (a1*a2) ) + (27 * a3) ) / 54;

/* get square / cube of s and q  */

s_sq = pow(s, 2);
q_cub = pow(q, 3);

s_abs = fabs(s);


/* ****** */

th = acos( (s/(sqrt(q_cub)) )); /* calculate theta */

if( (q_cub - s_sq) >= 0) /* cubic equation has 3 roots */
{
x1 = ((-2)*(sqrt(q))*(th/3)) - (a1/3);

x2 = ((-2)*(sqrt(q))*((th + (2*pi))/3)) - (a1/3);

x3 = ((-2)*(sqrt(q))*((th + (4*pi))/3)) - (a1/3);

printf("\nx1 = %f\nx2 = %f\nx3 = %f\n", x1, x2, x3);

}
else if( (s_sq - q_cub) > 0 ) /* cubic equation has 1 root */
{

float part1 = sqrt(s_sq - q_cub) + s_abs;

x1 = -(sign(s)) * ( (pow(part1, (1/3))) + (q/(pow(part1, (1/3)))) ) - (a3/3);
                                                                                                                                           
printf("\nx1 = %f", x1);

}
else
{
printf("something crap happened\n");
}


system("pause");

return 0;
}

int sign(float s)
{
if(s > 0)
{
return 1;
}
else if(s < 0)
{
return -1;
}

}
i have a stationary fetish

A Bit of Fruit

  • loves threads ALL ABOUT HIM!!
  • Jackass V
  • Posts: 1191
  • Karma: +111/-55
  • Frontier Psychiatrist
Re: Cubic equation program not giving me right answers
« Reply #1 on: August 23, 2006, 05:51:13 AM »
im gonna post on cprog too...this board gets no traffic
i have a stationary fetish