\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;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < 671.6842873116133Initial program 16.7
Simplified16.7
rmApplied flip--16.8
Simplified16.0
if 671.6842873116133 < b Initial program 35.5
Simplified35.5
Taylor expanded around inf 17.0
rmApplied associate-*r/17.0
Applied associate-/l/17.0
Final simplification16.6
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)))