Average Error: 33.2 → 10.0
Time: 21.0s
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 -7.397994825724217 \cdot 10^{+150}:\\ \;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\ \mathbf{elif}\;b \le 1.2158870426682226 \cdot 10^{-82}:\\ \;\;\;\;\frac{\frac{1}{\frac{a}{\sqrt{\mathsf{fma}\left(b, b, \left(-4 \cdot c\right) \cdot a\right)} - b}}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{-2 \cdot \frac{c}{b}}{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 -7.397994825724217 \cdot 10^{+150}:\\
\;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r1739738 = b;
        double r1739739 = -r1739738;
        double r1739740 = r1739738 * r1739738;
        double r1739741 = 4.0;
        double r1739742 = a;
        double r1739743 = r1739741 * r1739742;
        double r1739744 = c;
        double r1739745 = r1739743 * r1739744;
        double r1739746 = r1739740 - r1739745;
        double r1739747 = sqrt(r1739746);
        double r1739748 = r1739739 + r1739747;
        double r1739749 = 2.0;
        double r1739750 = r1739749 * r1739742;
        double r1739751 = r1739748 / r1739750;
        return r1739751;
}

double f(double a, double b, double c) {
        double r1739752 = b;
        double r1739753 = -7.397994825724217e+150;
        bool r1739754 = r1739752 <= r1739753;
        double r1739755 = c;
        double r1739756 = r1739755 / r1739752;
        double r1739757 = a;
        double r1739758 = r1739752 / r1739757;
        double r1739759 = r1739756 - r1739758;
        double r1739760 = 2.0;
        double r1739761 = r1739759 * r1739760;
        double r1739762 = r1739761 / r1739760;
        double r1739763 = 1.2158870426682226e-82;
        bool r1739764 = r1739752 <= r1739763;
        double r1739765 = 1.0;
        double r1739766 = -4.0;
        double r1739767 = r1739766 * r1739755;
        double r1739768 = r1739767 * r1739757;
        double r1739769 = fma(r1739752, r1739752, r1739768);
        double r1739770 = sqrt(r1739769);
        double r1739771 = r1739770 - r1739752;
        double r1739772 = r1739757 / r1739771;
        double r1739773 = r1739765 / r1739772;
        double r1739774 = r1739773 / r1739760;
        double r1739775 = -2.0;
        double r1739776 = r1739775 * r1739756;
        double r1739777 = r1739776 / r1739760;
        double r1739778 = r1739764 ? r1739774 : r1739777;
        double r1739779 = r1739754 ? r1739762 : r1739778;
        return r1739779;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 3 regimes
  2. if b < -7.397994825724217e+150

    1. Initial program 59.1

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

      \[\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 associate-*l*59.1

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

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

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

    if -7.397994825724217e+150 < b < 1.2158870426682226e-82

    1. Initial program 11.8

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

      \[\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 associate-*l*11.7

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

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

    if 1.2158870426682226e-82 < b

    1. Initial program 52.3

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

      \[\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 associate-*l*52.3

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

      \[\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 -7.397994825724217 \cdot 10^{+150}:\\ \;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\ \mathbf{elif}\;b \le 1.2158870426682226 \cdot 10^{-82}:\\ \;\;\;\;\frac{\frac{1}{\frac{a}{\sqrt{\mathsf{fma}\left(b, b, \left(-4 \cdot c\right) \cdot a\right)} - b}}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\ \end{array}\]

Reproduce

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