65 double aover3(a / 3.0);
66 p = -(a * aover3) + b;
74 double dsqrt = std::sqrt(d);
75 u = std::cbrt(-q / 2.0 + dsqrt);
76 v = std::cbrt(-q / 2.0 - dsqrt);
77 res.x1.real(u + v - aover3);
86 if(std::abs(d) <= 1e-20)
88 u = std::cbrt(-q / 2.0);
90 res.x1.real(u + v - aover3);
97 alpha = std::atan(std::sqrt(-d) / -q * 2.0);
99 alpha = 2.0 * M_PI - alpha;
102 r * (std::cos((6.0 * M_PI - alpha) / 3.0) + std::cos(alpha / 3.0)) -
122 std::size_t polynome_size = polynome.size();
124 double a, b, c, delta;
126 switch(polynome_size)
152 delta = (b * b) - (a * c * 4);
157 else if(std::abs(delta) <= 1e-20)
159 res.x1.real(-b / (a * 2));
166 delta = std::sqrt(delta);
167 res.x1.real((-b + delta) / (a * 2));
168 res.x2.real((-b - delta) / (a * 2));
175 cubic_solver(res, polynome[3], polynome[2], polynome[1], polynome[0]);
const double BUFFER_SQRT3
void cubic_solver(InHousePolynomialSolverResult &res, double a1, double b, double c, double d)
const double BUFFER_inv27
const double BUFFER_pow11
InHousePolynomialSolverResult inHousePolynomialSolve(const std::vector< double > &polynome)
cubic solver adapted from https://www.codeproject.com/articles/798474/to-solve-a-cubic-equation thank...