Average Error: 33.2 → 10.0
Time: 19.4s
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(a \cdot c\right) \cdot -4\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(a \cdot c\right) \cdot -4\right)} - b}}}{2}\\

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

\end{array}
double f(double a, double b, double c) {
        double r1361604 = b;
        double r1361605 = -r1361604;
        double r1361606 = r1361604 * r1361604;
        double r1361607 = 4.0;
        double r1361608 = a;
        double r1361609 = r1361607 * r1361608;
        double r1361610 = c;
        double r1361611 = r1361609 * r1361610;
        double r1361612 = r1361606 - r1361611;
        double r1361613 = sqrt(r1361612);
        double r1361614 = r1361605 + r1361613;
        double r1361615 = 2.0;
        double r1361616 = r1361615 * r1361608;
        double r1361617 = r1361614 / r1361616;
        return r1361617;
}

double f(double a, double b, double c) {
        double r1361618 = b;
        double r1361619 = -7.397994825724217e+150;
        bool r1361620 = r1361618 <= r1361619;
        double r1361621 = c;
        double r1361622 = r1361621 / r1361618;
        double r1361623 = a;
        double r1361624 = r1361618 / r1361623;
        double r1361625 = r1361622 - r1361624;
        double r1361626 = 2.0;
        double r1361627 = r1361625 * r1361626;
        double r1361628 = r1361627 / r1361626;
        double r1361629 = 1.2158870426682226e-82;
        bool r1361630 = r1361618 <= r1361629;
        double r1361631 = 1.0;
        double r1361632 = r1361623 * r1361621;
        double r1361633 = -4.0;
        double r1361634 = r1361632 * r1361633;
        double r1361635 = fma(r1361618, r1361618, r1361634);
        double r1361636 = sqrt(r1361635);
        double r1361637 = r1361636 - r1361618;
        double r1361638 = r1361623 / r1361637;
        double r1361639 = r1361631 / r1361638;
        double r1361640 = r1361639 / r1361626;
        double r1361641 = -2.0;
        double r1361642 = r1361641 * r1361622;
        double r1361643 = r1361642 / r1361626;
        double r1361644 = r1361630 ? r1361640 : r1361643;
        double r1361645 = r1361620 ? r1361628 : r1361644;
        return r1361645;
}

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. Taylor expanded around 0 59.1

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

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

      \[\leadsto \frac{\color{blue}{2 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)}}{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. Taylor expanded around 0 11.7

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

      \[\leadsto \frac{\color{blue}{\frac{1}{\frac{a}{\sqrt{\mathsf{fma}\left(b, b, -4 \cdot \left(a \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. Taylor expanded around 0 52.3

      \[\leadsto \frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \color{blue}{-4 \cdot \left(a \cdot c\right)}\right)} - b}{a}}{2}\]
    4. 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(a \cdot c\right) \cdot -4\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)))