37 #ifndef INCLUDED_IMATHROOTS_H 38 #define INCLUDED_IMATHROOTS_H 84 template <
class T>
int solveLinear (T a, T b, T &x);
87 template <
class T>
int solveCubic (T a, T b, T c, T d, T x[3]);
124 T D = b * b - 4 * a * c;
130 x[0] = (-b + s) / (2 * a);
131 x[1] = (-b - s) / (2 * a);
151 T p = (3 * s - r * r) / 3;
152 T q = 2 * r * r * r / 27 - r * s / 3 + t;
155 T D = p3 * p3 * p3 + q2 * q2;
157 if (D == 0 && p3 == 0)
165 std::complex<T> u = std::pow (-q / 2 + std::sqrt (std::complex<T> (D)),
168 std::complex<T> v = -p / (T (3) * u);
170 const T sqrt3 = T (1.73205080756887729352744634150587);
172 std::complex<T> y0 (u + v);
174 std::complex<T> y1 (-(u + v) / T (2) +
175 (u - v) / T (2) * std::complex<T> (0, sqrt3));
177 std::complex<T> y2 (-(u + v) / T (2) -
178 (u - v) / T (2) * std::complex<T> (0, sqrt3));
182 x[0] = y0.real() - r / 3;
187 x[0] = y0.real() - r / 3;
188 x[1] = y1.real() - r / 3;
193 x[0] = y0.real() - r / 3;
194 x[1] = y1.real() - r / 3;
195 x[2] = y2.real() - r / 3;
int solveLinear(T a, T b, T &x)
Definition: ImathRoots.h:96
int solveNormalizedCubic(T r, T s, T t, T x[3])
Definition: ImathRoots.h:149
int solveCubic(T a, T b, T c, T d, T x[3])
Definition: ImathRoots.h:203
Definition: ImathBox.h:67
static T sqrt(T x)
Definition: ImathMath.h:114
int solveQuadratic(T a, T b, T c, T x[2])
Definition: ImathRoots.h:116