二次方程式
概要
二次方程式 $ax^2 + bx + c = 0$ を解の公式を用いて求めます.
使い方
重解はまとめない.
実装
std::vector<ld> quadratic_equation(ld a, ld b, ld c) {
ld d = b * b - 4 * a * c;
if (std::abs(a) < eps) return std::abs(b) > eps ? std::vector<ld>{-c / b} : std::vector<ld>{};
if (d < -eps) return {};
if (d < eps) return {-b / (2 * a), -b / (2 * a)};
int sign = (b >= 0) ? 1 : -1;
ld x0 = (-b - sign * sqrt(std::abs(d))) / (2 * a), x1 = c / (a * x0);
if (x0 > x1) std::swap(x0, x1);
return {x0, x1};
}