Average Error: 34.9 → 10.1
Time: 19.1s
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 -3.680329042988888396603264581948851078331 \cdot 10^{148}:\\ \;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\ \mathbf{elif}\;b \le 4.612990823111230552052602417245542305295 \cdot 10^{-104}:\\ \;\;\;\;\left(\sqrt{\mathsf{fma}\left(b, b, \left(-c\right) \cdot \left(4 \cdot a\right)\right)} - b\right) \cdot \frac{1}{a \cdot 2}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{b} \cdot -1\\ \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 -3.680329042988888396603264581948851078331 \cdot 10^{148}:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r2518024 = b;
        double r2518025 = -r2518024;
        double r2518026 = r2518024 * r2518024;
        double r2518027 = 4.0;
        double r2518028 = a;
        double r2518029 = r2518027 * r2518028;
        double r2518030 = c;
        double r2518031 = r2518029 * r2518030;
        double r2518032 = r2518026 - r2518031;
        double r2518033 = sqrt(r2518032);
        double r2518034 = r2518025 + r2518033;
        double r2518035 = 2.0;
        double r2518036 = r2518035 * r2518028;
        double r2518037 = r2518034 / r2518036;
        return r2518037;
}

double f(double a, double b, double c) {
        double r2518038 = b;
        double r2518039 = -3.6803290429888884e+148;
        bool r2518040 = r2518038 <= r2518039;
        double r2518041 = c;
        double r2518042 = r2518041 / r2518038;
        double r2518043 = a;
        double r2518044 = r2518038 / r2518043;
        double r2518045 = r2518042 - r2518044;
        double r2518046 = 1.0;
        double r2518047 = r2518045 * r2518046;
        double r2518048 = 4.6129908231112306e-104;
        bool r2518049 = r2518038 <= r2518048;
        double r2518050 = -r2518041;
        double r2518051 = 4.0;
        double r2518052 = r2518051 * r2518043;
        double r2518053 = r2518050 * r2518052;
        double r2518054 = fma(r2518038, r2518038, r2518053);
        double r2518055 = sqrt(r2518054);
        double r2518056 = r2518055 - r2518038;
        double r2518057 = 1.0;
        double r2518058 = 2.0;
        double r2518059 = r2518043 * r2518058;
        double r2518060 = r2518057 / r2518059;
        double r2518061 = r2518056 * r2518060;
        double r2518062 = -1.0;
        double r2518063 = r2518042 * r2518062;
        double r2518064 = r2518049 ? r2518061 : r2518063;
        double r2518065 = r2518040 ? r2518047 : r2518064;
        return r2518065;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 3 regimes
  2. if b < -3.6803290429888884e+148

    1. Initial program 62.1

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

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

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

    if -3.6803290429888884e+148 < b < 4.6129908231112306e-104

    1. Initial program 12.2

      \[\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-num12.3

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

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

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

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

    if 4.6129908231112306e-104 < b

    1. Initial program 52.7

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -3.680329042988888396603264581948851078331 \cdot 10^{148}:\\ \;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\ \mathbf{elif}\;b \le 4.612990823111230552052602417245542305295 \cdot 10^{-104}:\\ \;\;\;\;\left(\sqrt{\mathsf{fma}\left(b, b, \left(-c\right) \cdot \left(4 \cdot a\right)\right)} - b\right) \cdot \frac{1}{a \cdot 2}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{b} \cdot -1\\ \end{array}\]

Reproduce

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