Hey guys.

Im trying to write a program to calculate the roots of a cubic using Cardanos formula. Im new to programming and C, i've been at this problem for about 4 hours or so. I struggled to get my head around function prototypes and I dont really think i've worked it out yet.

Firstly, if i omit the A1 = blah line, it compiles, but I get "Q = nan S = nan", i dont understand why its returning "not a number" for these values??

Secondly, i dont understand how to use the pow() operator on the A1 line.

Thirdly, it wont compile because i think i've stuffed up the use of the function. I dont quite understand whats going on.

Fourthly.. should it be int main(), or float main(), the values that are to be calculated could be floating point numbers, not integers.

Fifthly.. I want it all in terms of a = 1, hence my if (a != 1) line, i used an if statement to do this, but then i wasn't sure if i needed an else statement. cant i just remove the else statement? is that redundant? i just want it to test if a is equal to 1, and if it isnt, i want it to divide the other coefficents by a.

Thanks so much for reading this and thanks alot if you post.

Code:

#include <stdio.h>
#include <math.h>
float sign(float S); /* sign function prototype */
int main()
{
float Q, S, a, b, c, d, A1, x1, x2, x3, theta;
/* Get coefficients from user */
printf("Cubic coefficient a? ");
scanf("%f", &a);
printf("Cubic coefficient b? ");
scanf("%f", &a);
printf("Cubic coefficient c? ");
scanf("%f", &a);
printf("Cubic coefficient d? ");
scanf("%f", &a);
/* Make sure a = 1, if it doesn't, recalculate the rest of the coefficents */
if (a != 1)
{
a = 1;
b = b/a;
c = c/a;
d = d/a;
}
else
{
a = a;
b = b;
c = c;
d = d;
}
/* Now to do some calculations to be used later in the program */
Q = (b*b - 3.*c)/(9.0);
S = (2.*b*b - 9.*b*c + 27.*d)/(54.0);
A1 = -sign(S)((sqrt[S*S - Q*Q*Q] + fabs(S))^(1/3);
printf("The value of %f = Q, and %f = S is\n" Q, S);
/* calculations will be done here */
/* if Q^3 - S^2 > 0 will be done here */
/* if Q^3 - S^2 <= 0 will be done here */
}
float sign(float S)
{
if (S > 0)
return 1;
else if (S < 0)
return -1;
else
return 0;
}