\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 0.09946845057046652:\\
\;\;\;\;\frac{\frac{\frac{\sqrt{\mathsf{fma}\left(c \cdot -4, a, b \cdot b\right)} \cdot \mathsf{fma}\left(c \cdot -4, a, b \cdot b\right) - \left(b \cdot b\right) \cdot b}{\mathsf{fma}\left(b, \sqrt{\mathsf{fma}\left(c \cdot -4, a, b \cdot b\right)}, b \cdot b + \mathsf{fma}\left(c \cdot -4, a, b \cdot b\right)\right)}}{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\end{array}double f(double a, double b, double c) {
double r545899 = b;
double r545900 = -r545899;
double r545901 = r545899 * r545899;
double r545902 = 4.0;
double r545903 = a;
double r545904 = r545902 * r545903;
double r545905 = c;
double r545906 = r545904 * r545905;
double r545907 = r545901 - r545906;
double r545908 = sqrt(r545907);
double r545909 = r545900 + r545908;
double r545910 = 2.0;
double r545911 = r545910 * r545903;
double r545912 = r545909 / r545911;
return r545912;
}
double f(double a, double b, double c) {
double r545913 = b;
double r545914 = 0.09946845057046652;
bool r545915 = r545913 <= r545914;
double r545916 = c;
double r545917 = -4.0;
double r545918 = r545916 * r545917;
double r545919 = a;
double r545920 = r545913 * r545913;
double r545921 = fma(r545918, r545919, r545920);
double r545922 = sqrt(r545921);
double r545923 = r545922 * r545921;
double r545924 = r545920 * r545913;
double r545925 = r545923 - r545924;
double r545926 = r545920 + r545921;
double r545927 = fma(r545913, r545922, r545926);
double r545928 = r545925 / r545927;
double r545929 = r545928 / r545919;
double r545930 = 2.0;
double r545931 = r545929 / r545930;
double r545932 = -2.0;
double r545933 = r545916 / r545913;
double r545934 = r545932 * r545933;
double r545935 = r545934 / r545930;
double r545936 = r545915 ? r545931 : r545935;
return r545936;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < 0.09946845057046652Initial program 24.0
Simplified23.9
rmApplied flip3--24.0
Simplified23.4
Simplified23.4
if 0.09946845057046652 < b Initial program 47.7
Simplified47.7
Taylor expanded around inf 9.2
Final simplification11.0
herbie shell --seed 2019152 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, medium range"
:pre (and (< 1.1102230246251565e-16 a 9007199254740992.0) (< 1.1102230246251565e-16 b 9007199254740992.0) (< 1.1102230246251565e-16 c 9007199254740992.0))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))