Average Error: 33.3 → 10.0
Time: 23.3s
Precision: 64
\[\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 -4.82289647433212 \cdot 10^{+153}:\\ \;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\ \mathbf{elif}\;b \le 3.289226058156428 \cdot 10^{-70}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(-4 \cdot a\right) \cdot c\right)} - 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 -4.82289647433212 \cdot 10^{+153}:\\
\;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r1114606 = b;
        double r1114607 = -r1114606;
        double r1114608 = r1114606 * r1114606;
        double r1114609 = 4.0;
        double r1114610 = a;
        double r1114611 = r1114609 * r1114610;
        double r1114612 = c;
        double r1114613 = r1114611 * r1114612;
        double r1114614 = r1114608 - r1114613;
        double r1114615 = sqrt(r1114614);
        double r1114616 = r1114607 + r1114615;
        double r1114617 = 2.0;
        double r1114618 = r1114617 * r1114610;
        double r1114619 = r1114616 / r1114618;
        return r1114619;
}

double f(double a, double b, double c) {
        double r1114620 = b;
        double r1114621 = -4.82289647433212e+153;
        bool r1114622 = r1114620 <= r1114621;
        double r1114623 = c;
        double r1114624 = r1114623 / r1114620;
        double r1114625 = a;
        double r1114626 = r1114620 / r1114625;
        double r1114627 = r1114624 - r1114626;
        double r1114628 = 2.0;
        double r1114629 = r1114627 * r1114628;
        double r1114630 = r1114629 / r1114628;
        double r1114631 = 3.289226058156428e-70;
        bool r1114632 = r1114620 <= r1114631;
        double r1114633 = -4.0;
        double r1114634 = r1114633 * r1114625;
        double r1114635 = r1114634 * r1114623;
        double r1114636 = fma(r1114620, r1114620, r1114635);
        double r1114637 = sqrt(r1114636);
        double r1114638 = r1114637 - r1114620;
        double r1114639 = r1114638 / r1114625;
        double r1114640 = r1114639 / r1114628;
        double r1114641 = -2.0;
        double r1114642 = r1114624 * r1114641;
        double r1114643 = r1114642 / r1114628;
        double r1114644 = r1114632 ? r1114640 : r1114643;
        double r1114645 = r1114622 ? r1114630 : r1114644;
        return r1114645;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 3 regimes
  2. if b < -4.82289647433212e+153

    1. Initial program 60.9

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

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot -4\right) \cdot c\right)} - b}{a}}{2}}\]
    3. Using strategy rm
    4. Applied div-inv60.9

      \[\leadsto \frac{\color{blue}{\left(\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot -4\right) \cdot c\right)} - b\right) \cdot \frac{1}{a}}}{2}\]
    5. Taylor expanded around -inf 2.3

      \[\leadsto \frac{\color{blue}{2 \cdot \frac{c}{b} - 2 \cdot \frac{b}{a}}}{2}\]
    6. Simplified2.3

      \[\leadsto \frac{\color{blue}{2 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)}}{2}\]

    if -4.82289647433212e+153 < b < 3.289226058156428e-70

    1. Initial program 12.4

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

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot -4\right) \cdot c\right)} - b}{a}}{2}}\]
    3. Using strategy rm
    4. Applied div-inv12.6

      \[\leadsto \frac{\color{blue}{\left(\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot -4\right) \cdot c\right)} - b\right) \cdot \frac{1}{a}}}{2}\]
    5. Using strategy rm
    6. Applied associate-*r/12.4

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

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

    if 3.289226058156428e-70 < b

    1. Initial program 52.2

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

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot -4\right) \cdot c\right)} - b}{a}}{2}}\]
    3. Using strategy rm
    4. Applied div-inv52.2

      \[\leadsto \frac{\color{blue}{\left(\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot -4\right) \cdot c\right)} - b\right) \cdot \frac{1}{a}}}{2}\]
    5. Taylor expanded around inf 52.2

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

      \[\leadsto \frac{\left(\sqrt{\color{blue}{\mathsf{fma}\left(b, b, \left(-4 \cdot a\right) \cdot c\right)}} - b\right) \cdot \frac{1}{a}}{2}\]
    7. Taylor expanded around inf 9.1

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -4.82289647433212 \cdot 10^{+153}:\\ \;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\ \mathbf{elif}\;b \le 3.289226058156428 \cdot 10^{-70}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(-4 \cdot a\right) \cdot c\right)} - b}{a}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{c}{b} \cdot -2}{2}\\ \end{array}\]

Reproduce

herbie shell --seed 2019142 +o rules:numerics
(FPCore (a b c)
  :name "Quadratic roots, full range"
  (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))