Average Error: 28.5 → 17.0
Time: 20.6s
Precision: 64
\[1.053671212772350866701172186984739043147 \cdot 10^{-8} \lt a \lt 94906265.62425155937671661376953125 \land 1.053671212772350866701172186984739043147 \cdot 10^{-8} \lt b \lt 94906265.62425155937671661376953125 \land 1.053671212772350866701172186984739043147 \cdot 10^{-8} \lt c \lt 94906265.62425155937671661376953125\]
\[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
\[\begin{array}{l} \mathbf{if}\;b \le 53.72772989939689125549193704500794410706:\\ \;\;\;\;\frac{\frac{\frac{\left(b \cdot b - \left(a \cdot c\right) \cdot 4\right) \cdot \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4} - \left(b \cdot b\right) \cdot b}{\mathsf{fma}\left(\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}, b, b \cdot b - \left(a \cdot c\right) \cdot 4\right) + b \cdot b}}{a}}{2}\\ \mathbf{elif}\;b \le 250.8081548127311179996468126773834228516:\\ \;\;\;\;\frac{\frac{c}{b} \cdot -2}{2}\\ \mathbf{elif}\;b \le 2125.07914601017046152264811098575592041:\\ \;\;\;\;\frac{\frac{\frac{\left(b \cdot b - \left(a \cdot c\right) \cdot 4\right) \cdot \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4} - \left(b \cdot b\right) \cdot b}{\mathsf{fma}\left(\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}, b, b \cdot b - \left(a \cdot c\right) \cdot 4\right) + b \cdot b}}{a}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{c}{b} \cdot -2}{2}\\ \end{array}\]
\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}
\begin{array}{l}
\mathbf{if}\;b \le 53.72772989939689125549193704500794410706:\\
\;\;\;\;\frac{\frac{\frac{\left(b \cdot b - \left(a \cdot c\right) \cdot 4\right) \cdot \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4} - \left(b \cdot b\right) \cdot b}{\mathsf{fma}\left(\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}, b, b \cdot b - \left(a \cdot c\right) \cdot 4\right) + b \cdot b}}{a}}{2}\\

\mathbf{elif}\;b \le 250.8081548127311179996468126773834228516:\\
\;\;\;\;\frac{\frac{c}{b} \cdot -2}{2}\\

\mathbf{elif}\;b \le 2125.07914601017046152264811098575592041:\\
\;\;\;\;\frac{\frac{\frac{\left(b \cdot b - \left(a \cdot c\right) \cdot 4\right) \cdot \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4} - \left(b \cdot b\right) \cdot b}{\mathsf{fma}\left(\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}, b, b \cdot b - \left(a \cdot c\right) \cdot 4\right) + b \cdot b}}{a}}{2}\\

\mathbf{else}:\\
\;\;\;\;\frac{\frac{c}{b} \cdot -2}{2}\\

\end{array}
double f(double a, double b, double c) {
        double r1788583 = b;
        double r1788584 = -r1788583;
        double r1788585 = r1788583 * r1788583;
        double r1788586 = 4.0;
        double r1788587 = a;
        double r1788588 = r1788586 * r1788587;
        double r1788589 = c;
        double r1788590 = r1788588 * r1788589;
        double r1788591 = r1788585 - r1788590;
        double r1788592 = sqrt(r1788591);
        double r1788593 = r1788584 + r1788592;
        double r1788594 = 2.0;
        double r1788595 = r1788594 * r1788587;
        double r1788596 = r1788593 / r1788595;
        return r1788596;
}

double f(double a, double b, double c) {
        double r1788597 = b;
        double r1788598 = 53.72772989939689;
        bool r1788599 = r1788597 <= r1788598;
        double r1788600 = r1788597 * r1788597;
        double r1788601 = a;
        double r1788602 = c;
        double r1788603 = r1788601 * r1788602;
        double r1788604 = 4.0;
        double r1788605 = r1788603 * r1788604;
        double r1788606 = r1788600 - r1788605;
        double r1788607 = sqrt(r1788606);
        double r1788608 = r1788606 * r1788607;
        double r1788609 = r1788600 * r1788597;
        double r1788610 = r1788608 - r1788609;
        double r1788611 = fma(r1788607, r1788597, r1788606);
        double r1788612 = r1788611 + r1788600;
        double r1788613 = r1788610 / r1788612;
        double r1788614 = r1788613 / r1788601;
        double r1788615 = 2.0;
        double r1788616 = r1788614 / r1788615;
        double r1788617 = 250.80815481273112;
        bool r1788618 = r1788597 <= r1788617;
        double r1788619 = r1788602 / r1788597;
        double r1788620 = -2.0;
        double r1788621 = r1788619 * r1788620;
        double r1788622 = r1788621 / r1788615;
        double r1788623 = 2125.0791460101705;
        bool r1788624 = r1788597 <= r1788623;
        double r1788625 = r1788624 ? r1788616 : r1788622;
        double r1788626 = r1788618 ? r1788622 : r1788625;
        double r1788627 = r1788599 ? r1788616 : r1788626;
        return r1788627;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 2 regimes
  2. if b < 53.72772989939689 or 250.80815481273112 < b < 2125.0791460101705

    1. Initial program 17.3

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Simplified17.3

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{b \cdot b - \left(4 \cdot c\right) \cdot a} - b}{a}}{2}}\]
    3. Using strategy rm
    4. Applied flip3--17.4

      \[\leadsto \frac{\frac{\color{blue}{\frac{{\left(\sqrt{b \cdot b - \left(4 \cdot c\right) \cdot a}\right)}^{3} - {b}^{3}}{\sqrt{b \cdot b - \left(4 \cdot c\right) \cdot a} \cdot \sqrt{b \cdot b - \left(4 \cdot c\right) \cdot a} + \left(b \cdot b + \sqrt{b \cdot b - \left(4 \cdot c\right) \cdot a} \cdot b\right)}}}{a}}{2}\]
    5. Simplified16.6

      \[\leadsto \frac{\frac{\frac{\color{blue}{\left(b \cdot b - 4 \cdot \left(a \cdot c\right)\right) \cdot \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - \left(b \cdot b\right) \cdot b}}{\sqrt{b \cdot b - \left(4 \cdot c\right) \cdot a} \cdot \sqrt{b \cdot b - \left(4 \cdot c\right) \cdot a} + \left(b \cdot b + \sqrt{b \cdot b - \left(4 \cdot c\right) \cdot a} \cdot b\right)}}{a}}{2}\]
    6. Simplified16.6

      \[\leadsto \frac{\frac{\frac{\left(b \cdot b - 4 \cdot \left(a \cdot c\right)\right) \cdot \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - \left(b \cdot b\right) \cdot b}{\color{blue}{b \cdot b + \mathsf{fma}\left(\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}, b, b \cdot b - 4 \cdot \left(a \cdot c\right)\right)}}}{a}}{2}\]

    if 53.72772989939689 < b < 250.80815481273112 or 2125.0791460101705 < b

    1. Initial program 35.0

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Simplified35.0

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{b \cdot b - \left(4 \cdot c\right) \cdot a} - b}{a}}{2}}\]
    3. Taylor expanded around inf 17.3

      \[\leadsto \frac{\color{blue}{-2 \cdot \frac{c}{b}}}{2}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification17.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le 53.72772989939689125549193704500794410706:\\ \;\;\;\;\frac{\frac{\frac{\left(b \cdot b - \left(a \cdot c\right) \cdot 4\right) \cdot \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4} - \left(b \cdot b\right) \cdot b}{\mathsf{fma}\left(\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}, b, b \cdot b - \left(a \cdot c\right) \cdot 4\right) + b \cdot b}}{a}}{2}\\ \mathbf{elif}\;b \le 250.8081548127311179996468126773834228516:\\ \;\;\;\;\frac{\frac{c}{b} \cdot -2}{2}\\ \mathbf{elif}\;b \le 2125.07914601017046152264811098575592041:\\ \;\;\;\;\frac{\frac{\frac{\left(b \cdot b - \left(a \cdot c\right) \cdot 4\right) \cdot \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4} - \left(b \cdot b\right) \cdot b}{\mathsf{fma}\left(\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}, b, b \cdot b - \left(a \cdot c\right) \cdot 4\right) + b \cdot b}}{a}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{c}{b} \cdot -2}{2}\\ \end{array}\]

Reproduce

herbie shell --seed 2019174 +o rules:numerics
(FPCore (a b c)
  :name "Quadratic roots, narrow range"
  :pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
  (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))