31#include <gsl/gsl_math.h>
32#include <gsl/gsl_complex.h>
33#include <gsl/gsl_complex_math.h>
34#include <gsl/gsl_poly.h>
36#define SWAP(a,b) do { gsl_complex tmp = b ; b = a ; a = tmp ; } while(0)
47 double r4 = 1.0 / 4.0;
48 double q2 = 1.0 / 2.0,
q4 = 1.0 / 4.0,
q8 = 1.0 / 8.0;
49 double q1 = 3.0 / 8.0,
q3 = 3.0 / 16.0;
52 int k1 = 0,
k2 = 0, mt;
109 if (0.0 ==
c && 0.0 ==
d)
149 double R =
rcub / 54;
151 double Q3 = Q * Q * Q;
158 if (0 ==
R && 0 == Q)
167 double sqrtQ = sqrt (Q);
183 double sqrtQ = sqrt (Q);
193 double norm = -2 *
sqrtQ;
195 u[0] = norm * cos (theta / 3) -
rc / 3;
196 u[1] = norm * cos ((theta + 2.0 *
M_PI) / 3) -
rc / 3;
197 u[2] = norm * cos ((theta - 2.0 *
M_PI) / 3) -
rc / 3;
201 double sgnR = (
R >= 0 ? 1 : -1);
202 double modR = fabs (
R);
208 u[0] = A + B -
rc / 3;
209 u[1] = -0.5 * (A + B) -
rc / 3;
304 if (
u[
k1] >= 0 &&
u[
k2] >= 0)
312 else if (
u[
k1] >= 0 &&
u[
k2] < 0)
319 else if (
u[
k1] < 0 &&
u[
k2] >= 0)
326 else if (
u[
k1] < 0 &&
u[
k2] < 0)
#define R(a, b, c, d, e, f, g, h, i)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
int gsl_poly_complex_solve_quartic(double a, double b, double c, double d, gsl_complex *z0, gsl_complex *z1, gsl_complex *z2, gsl_complex *z3)
#define R2(v, w, x, y, z, i)