public static double Xroot(double a, double x)
return (i * Math.Exp( Math.Log(a*i)/x));
public static void Main()
double p = -(a * a / 3.0) + b;
double q = (2.0 / 27.0 * a * a * a) - (a * b / 3.0) + c;
double d = q * q / 4.0 + p * p * p / 27.0;
if (Math.Abs(d) < Math.Pow(10.0, -11.0))
double u = Xroot(-q / 2.0 + Math.Sqrt(d), 3.0);
double v = Xroot(-q / 2.0 - Math.Sqrt(d), 3.0);
Console.WriteLine(u + v - a / 3.0);