Average Error: 34.5 → 9.9
Time: 5.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 -1.52779163831840318 \cdot 10^{117}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le 4.3062534203630095 \cdot 10^{-45}:\\ \;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \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 -1.52779163831840318 \cdot 10^{117}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\

\mathbf{elif}\;b \le 4.3062534203630095 \cdot 10^{-45}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\\

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

\end{array}
double f(double a, double b, double c) {
        double r61613 = b;
        double r61614 = -r61613;
        double r61615 = r61613 * r61613;
        double r61616 = 4.0;
        double r61617 = a;
        double r61618 = r61616 * r61617;
        double r61619 = c;
        double r61620 = r61618 * r61619;
        double r61621 = r61615 - r61620;
        double r61622 = sqrt(r61621);
        double r61623 = r61614 + r61622;
        double r61624 = 2.0;
        double r61625 = r61624 * r61617;
        double r61626 = r61623 / r61625;
        return r61626;
}

double f(double a, double b, double c) {
        double r61627 = b;
        double r61628 = -1.5277916383184032e+117;
        bool r61629 = r61627 <= r61628;
        double r61630 = 1.0;
        double r61631 = c;
        double r61632 = r61631 / r61627;
        double r61633 = a;
        double r61634 = r61627 / r61633;
        double r61635 = r61632 - r61634;
        double r61636 = r61630 * r61635;
        double r61637 = 4.3062534203630095e-45;
        bool r61638 = r61627 <= r61637;
        double r61639 = 1.0;
        double r61640 = 2.0;
        double r61641 = r61640 * r61633;
        double r61642 = -r61627;
        double r61643 = r61627 * r61627;
        double r61644 = 4.0;
        double r61645 = r61644 * r61633;
        double r61646 = r61645 * r61631;
        double r61647 = r61643 - r61646;
        double r61648 = sqrt(r61647);
        double r61649 = r61642 + r61648;
        double r61650 = r61641 / r61649;
        double r61651 = r61639 / r61650;
        double r61652 = -1.0;
        double r61653 = r61652 * r61632;
        double r61654 = r61638 ? r61651 : r61653;
        double r61655 = r61629 ? r61636 : r61654;
        return r61655;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 3 regimes
  2. if b < -1.5277916383184032e+117

    1. Initial program 51.3

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Taylor expanded around -inf 3.7

      \[\leadsto \color{blue}{1 \cdot \frac{c}{b} - 1 \cdot \frac{b}{a}}\]
    3. Simplified3.7

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

    if -1.5277916383184032e+117 < b < 4.3062534203630095e-45

    1. Initial program 13.6

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Using strategy rm
    3. Applied clear-num13.7

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

    if 4.3062534203630095e-45 < b

    1. Initial program 54.8

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Taylor expanded around inf 7.5

      \[\leadsto \color{blue}{-1 \cdot \frac{c}{b}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification9.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -1.52779163831840318 \cdot 10^{117}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le 4.3062534203630095 \cdot 10^{-45}:\\ \;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \end{array}\]

Reproduce

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