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 = u + v - aover3;
86 if(std::abs(d) <= 1e-20)
88 u = std::cbrt(-q / 2.0);
90 res.x1 = 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 = -b / (a * 2);
166 delta = std::sqrt(delta);
167 res.x1 = (-b + delta) / (a * 2);
168 res.x2 = (-b - delta) / (a * 2);
175 cubic_solver(res, polynome[3], polynome[2], polynome[1], polynome[0]);