\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\end{array}\begin{array}{l}
\mathbf{if}\;b \le -6.8563483521743725 \cdot 10^{121}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{2 \cdot \frac{a \cdot c}{b} - 2 \cdot b}\\
\end{array}\\
\mathbf{elif}\;b \le 6.11692797249710472 \cdot 10^{145}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) + \left(\sqrt[3]{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt[3]{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\right) \cdot \sqrt[3]{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\\
\end{array}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;\frac{-2 \cdot b}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\end{array}double f(double a, double b, double c) {
double r40016 = b;
double r40017 = 0.0;
bool r40018 = r40016 >= r40017;
double r40019 = -r40016;
double r40020 = r40016 * r40016;
double r40021 = 4.0;
double r40022 = a;
double r40023 = r40021 * r40022;
double r40024 = c;
double r40025 = r40023 * r40024;
double r40026 = r40020 - r40025;
double r40027 = sqrt(r40026);
double r40028 = r40019 - r40027;
double r40029 = 2.0;
double r40030 = r40029 * r40022;
double r40031 = r40028 / r40030;
double r40032 = r40029 * r40024;
double r40033 = r40019 + r40027;
double r40034 = r40032 / r40033;
double r40035 = r40018 ? r40031 : r40034;
return r40035;
}
double f(double a, double b, double c) {
double r40036 = b;
double r40037 = -6.8563483521743725e+121;
bool r40038 = r40036 <= r40037;
double r40039 = 0.0;
bool r40040 = r40036 >= r40039;
double r40041 = -r40036;
double r40042 = r40036 * r40036;
double r40043 = 4.0;
double r40044 = a;
double r40045 = r40043 * r40044;
double r40046 = c;
double r40047 = r40045 * r40046;
double r40048 = r40042 - r40047;
double r40049 = sqrt(r40048);
double r40050 = r40041 - r40049;
double r40051 = 2.0;
double r40052 = r40051 * r40044;
double r40053 = r40050 / r40052;
double r40054 = r40051 * r40046;
double r40055 = r40044 * r40046;
double r40056 = r40055 / r40036;
double r40057 = r40051 * r40056;
double r40058 = 2.0;
double r40059 = r40058 * r40036;
double r40060 = r40057 - r40059;
double r40061 = r40054 / r40060;
double r40062 = r40040 ? r40053 : r40061;
double r40063 = 6.116927972497105e+145;
bool r40064 = r40036 <= r40063;
double r40065 = cbrt(r40049);
double r40066 = r40065 * r40065;
double r40067 = r40066 * r40065;
double r40068 = r40041 + r40067;
double r40069 = r40054 / r40068;
double r40070 = r40040 ? r40053 : r40069;
double r40071 = -2.0;
double r40072 = r40071 * r40036;
double r40073 = r40072 / r40052;
double r40074 = r40041 + r40049;
double r40075 = r40054 / r40074;
double r40076 = r40040 ? r40073 : r40075;
double r40077 = r40064 ? r40070 : r40076;
double r40078 = r40038 ? r40062 : r40077;
return r40078;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -6.8563483521743725e+121Initial program 31.8
Taylor expanded around -inf 6.0
if -6.8563483521743725e+121 < b < 6.116927972497105e+145Initial program 8.3
rmApplied add-cube-cbrt8.7
if 6.116927972497105e+145 < b Initial program 60.8
rmApplied add-exp-log61.1
rmApplied pow161.1
Applied log-pow61.1
Applied exp-prod61.1
Simplified61.1
Taylor expanded around inf 3.1
Simplified3.1
Final simplification7.4
herbie shell --seed 2020049
(FPCore (a b c)
:name "jeff quadratic root 1"
:precision binary64
(if (>= b 0.0) (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ (* 2 c) (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))))))