\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\end{array}\begin{array}{l}
\mathbf{if}\;b \le -5.209416901218326274788106845799636160522 \cdot 10^{153}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(-b\right) + \left(2 \cdot \frac{a \cdot c}{b} - b\right)}{2 \cdot a}\\
\end{array}\\
\mathbf{elif}\;b \le 6.131412783531557547355036260117623397574 \cdot 10^{152}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{2 \cdot a}\\
\end{array}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \left(b - 2 \cdot \frac{a \cdot c}{b}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\end{array}double f(double a, double b, double c) {
double r31003 = b;
double r31004 = 0.0;
bool r31005 = r31003 >= r31004;
double r31006 = 2.0;
double r31007 = c;
double r31008 = r31006 * r31007;
double r31009 = -r31003;
double r31010 = r31003 * r31003;
double r31011 = 4.0;
double r31012 = a;
double r31013 = r31011 * r31012;
double r31014 = r31013 * r31007;
double r31015 = r31010 - r31014;
double r31016 = sqrt(r31015);
double r31017 = r31009 - r31016;
double r31018 = r31008 / r31017;
double r31019 = r31009 + r31016;
double r31020 = r31006 * r31012;
double r31021 = r31019 / r31020;
double r31022 = r31005 ? r31018 : r31021;
return r31022;
}
double f(double a, double b, double c) {
double r31023 = b;
double r31024 = -5.209416901218326e+153;
bool r31025 = r31023 <= r31024;
double r31026 = 0.0;
bool r31027 = r31023 >= r31026;
double r31028 = 2.0;
double r31029 = c;
double r31030 = r31028 * r31029;
double r31031 = -r31023;
double r31032 = r31023 * r31023;
double r31033 = 4.0;
double r31034 = a;
double r31035 = r31033 * r31034;
double r31036 = r31035 * r31029;
double r31037 = r31032 - r31036;
double r31038 = sqrt(r31037);
double r31039 = r31031 - r31038;
double r31040 = r31030 / r31039;
double r31041 = r31034 * r31029;
double r31042 = r31041 / r31023;
double r31043 = r31028 * r31042;
double r31044 = r31043 - r31023;
double r31045 = r31031 + r31044;
double r31046 = r31028 * r31034;
double r31047 = r31045 / r31046;
double r31048 = r31027 ? r31040 : r31047;
double r31049 = 6.131412783531558e+152;
bool r31050 = r31023 <= r31049;
double r31051 = r31031 + r31038;
double r31052 = sqrt(r31051);
double r31053 = r31052 * r31052;
double r31054 = r31053 / r31046;
double r31055 = r31027 ? r31040 : r31054;
double r31056 = r31023 - r31043;
double r31057 = r31031 - r31056;
double r31058 = r31030 / r31057;
double r31059 = r31051 / r31046;
double r31060 = r31027 ? r31058 : r31059;
double r31061 = r31050 ? r31055 : r31060;
double r31062 = r31025 ? r31048 : r31061;
return r31062;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -5.209416901218326e+153Initial program 63.8
Taylor expanded around -inf 10.6
if -5.209416901218326e+153 < b < 6.131412783531558e+152Initial program 8.6
rmApplied add-sqr-sqrt8.7
if 6.131412783531558e+152 < b Initial program 38.5
Taylor expanded around inf 6.6
Final simplification8.5
herbie shell --seed 2019294
(FPCore (a b c)
:name "jeff quadratic root 2"
:precision binary64
(if (>= b 0.0) (/ (* 2 c) (- (- b) (sqrt (- (* b b) (* (* 4 a) c))))) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a))))