Home > libalgo > 二次方程式

二次方程式

概要

二次方程式 $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};
}

検証

AOJ 2220 (Submission)