Average Error: 28.4 → 16.6
Time: 7.7s
Precision: 64
\[1.053671212772350866701172186984739043147 \cdot 10^{-8} \lt a \lt 94906265.62425155937671661376953125 \land 1.053671212772350866701172186984739043147 \cdot 10^{-8} \lt b \lt 94906265.62425155937671661376953125 \land 1.053671212772350866701172186984739043147 \cdot 10^{-8} \lt c \lt 94906265.62425155937671661376953125\]
\[\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 671.6842873116132750510587356984615325928:\\ \;\;\;\;\frac{\frac{b \cdot b - \mathsf{fma}\left(b, b, 4 \cdot \left(a \cdot c\right)\right)}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} + b}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-2 \cdot \left(a \cdot c\right)}{\left(2 \cdot a\right) \cdot 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 671.6842873116132750510587356984615325928:\\
\;\;\;\;\frac{\frac{b \cdot b - \mathsf{fma}\left(b, b, 4 \cdot \left(a \cdot c\right)\right)}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} + b}}{2 \cdot a}\\

\mathbf{else}:\\
\;\;\;\;\frac{-2 \cdot \left(a \cdot c\right)}{\left(2 \cdot a\right) \cdot b}\\

\end{array}
double f(double a, double b, double c) {
        double r25008 = b;
        double r25009 = -r25008;
        double r25010 = r25008 * r25008;
        double r25011 = 4.0;
        double r25012 = a;
        double r25013 = r25011 * r25012;
        double r25014 = c;
        double r25015 = r25013 * r25014;
        double r25016 = r25010 - r25015;
        double r25017 = sqrt(r25016);
        double r25018 = r25009 + r25017;
        double r25019 = 2.0;
        double r25020 = r25019 * r25012;
        double r25021 = r25018 / r25020;
        return r25021;
}

double f(double a, double b, double c) {
        double r25022 = b;
        double r25023 = 671.6842873116133;
        bool r25024 = r25022 <= r25023;
        double r25025 = r25022 * r25022;
        double r25026 = 4.0;
        double r25027 = a;
        double r25028 = c;
        double r25029 = r25027 * r25028;
        double r25030 = r25026 * r25029;
        double r25031 = fma(r25022, r25022, r25030);
        double r25032 = r25025 - r25031;
        double r25033 = r25026 * r25027;
        double r25034 = r25033 * r25028;
        double r25035 = r25025 - r25034;
        double r25036 = sqrt(r25035);
        double r25037 = r25036 + r25022;
        double r25038 = r25032 / r25037;
        double r25039 = 2.0;
        double r25040 = r25039 * r25027;
        double r25041 = r25038 / r25040;
        double r25042 = -2.0;
        double r25043 = r25042 * r25029;
        double r25044 = r25040 * r25022;
        double r25045 = r25043 / r25044;
        double r25046 = r25024 ? r25041 : r25045;
        return r25046;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 2 regimes
  2. if b < 671.6842873116133

    1. Initial program 16.7

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

      \[\leadsto \color{blue}{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}{2 \cdot a}}\]
    3. Using strategy rm
    4. Applied flip--16.8

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

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

    if 671.6842873116133 < b

    1. Initial program 35.5

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

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

      \[\leadsto \frac{\color{blue}{-2 \cdot \frac{a \cdot c}{b}}}{2 \cdot a}\]
    4. Using strategy rm
    5. Applied associate-*r/17.0

      \[\leadsto \frac{\color{blue}{\frac{-2 \cdot \left(a \cdot c\right)}{b}}}{2 \cdot a}\]
    6. Applied associate-/l/17.0

      \[\leadsto \color{blue}{\frac{-2 \cdot \left(a \cdot c\right)}{\left(2 \cdot a\right) \cdot b}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification16.6

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

Reproduce

herbie shell --seed 2019350 +o rules:numerics
(FPCore (a b c)
  :name "Quadratic roots, narrow range"
  :precision binary64
  :pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
  (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))