\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 17.714642954298647:\\
\;\;\;\;\frac{\frac{\frac{b \cdot b - \mathsf{fma}\left(b, b, \left(4 \cdot a\right) \cdot c\right)}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} + b}}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{-2}{\frac{a}{\frac{a}{\frac{b}{c}}} \cdot 2}\\
\end{array}double f(double a, double b, double c) {
double r25834 = b;
double r25835 = -r25834;
double r25836 = r25834 * r25834;
double r25837 = 4.0;
double r25838 = a;
double r25839 = r25837 * r25838;
double r25840 = c;
double r25841 = r25839 * r25840;
double r25842 = r25836 - r25841;
double r25843 = sqrt(r25842);
double r25844 = r25835 + r25843;
double r25845 = 2.0;
double r25846 = r25845 * r25838;
double r25847 = r25844 / r25846;
return r25847;
}
double f(double a, double b, double c) {
double r25848 = b;
double r25849 = 17.714642954298647;
bool r25850 = r25848 <= r25849;
double r25851 = r25848 * r25848;
double r25852 = 4.0;
double r25853 = a;
double r25854 = r25852 * r25853;
double r25855 = c;
double r25856 = r25854 * r25855;
double r25857 = fma(r25848, r25848, r25856);
double r25858 = r25851 - r25857;
double r25859 = r25851 - r25856;
double r25860 = sqrt(r25859);
double r25861 = r25860 + r25848;
double r25862 = r25858 / r25861;
double r25863 = 2.0;
double r25864 = r25862 / r25863;
double r25865 = r25864 / r25853;
double r25866 = -2.0;
double r25867 = r25848 / r25855;
double r25868 = r25853 / r25867;
double r25869 = r25853 / r25868;
double r25870 = r25869 * r25863;
double r25871 = r25866 / r25870;
double r25872 = r25850 ? r25865 : r25871;
return r25872;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < 17.714642954298647Initial program 13.9
Simplified13.9
rmApplied flip--13.9
Simplified13.2
if 17.714642954298647 < b Initial program 33.3
Simplified33.3
Taylor expanded around inf 18.7
rmApplied clear-num18.7
rmApplied *-un-lft-identity18.7
Applied times-frac18.7
Applied associate-/l*18.7
Simplified18.7
Final simplification17.3
herbie shell --seed 2020046 +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)))