\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 -8.00336887744975224 \cdot 10^{118}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;-2 \cdot \frac{c}{b}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}\\
\mathbf{elif}\;b \le 1.96909460888896495 \cdot 10^{161}:\\
\;\;\;\;\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|\sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c}\right| \cdot \sqrt{\sqrt[3]{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 r44200 = b;
double r44201 = 0.0;
bool r44202 = r44200 >= r44201;
double r44203 = 2.0;
double r44204 = c;
double r44205 = r44203 * r44204;
double r44206 = -r44200;
double r44207 = r44200 * r44200;
double r44208 = 4.0;
double r44209 = a;
double r44210 = r44208 * r44209;
double r44211 = r44210 * r44204;
double r44212 = r44207 - r44211;
double r44213 = sqrt(r44212);
double r44214 = r44206 - r44213;
double r44215 = r44205 / r44214;
double r44216 = r44206 + r44213;
double r44217 = r44203 * r44209;
double r44218 = r44216 / r44217;
double r44219 = r44202 ? r44215 : r44218;
return r44219;
}
double f(double a, double b, double c) {
double r44220 = b;
double r44221 = -8.003368877449752e+118;
bool r44222 = r44220 <= r44221;
double r44223 = 0.0;
bool r44224 = r44220 >= r44223;
double r44225 = -2.0;
double r44226 = c;
double r44227 = r44226 / r44220;
double r44228 = r44225 * r44227;
double r44229 = 1.0;
double r44230 = a;
double r44231 = r44220 / r44230;
double r44232 = r44227 - r44231;
double r44233 = r44229 * r44232;
double r44234 = r44224 ? r44228 : r44233;
double r44235 = 1.969094608888965e+161;
bool r44236 = r44220 <= r44235;
double r44237 = 2.0;
double r44238 = r44237 * r44226;
double r44239 = -r44220;
double r44240 = r44220 * r44220;
double r44241 = 4.0;
double r44242 = r44241 * r44230;
double r44243 = r44242 * r44226;
double r44244 = r44240 - r44243;
double r44245 = sqrt(r44244);
double r44246 = r44239 - r44245;
double r44247 = r44238 / r44246;
double r44248 = cbrt(r44244);
double r44249 = fabs(r44248);
double r44250 = sqrt(r44248);
double r44251 = r44249 * r44250;
double r44252 = r44239 + r44251;
double r44253 = r44237 * r44230;
double r44254 = r44252 / r44253;
double r44255 = r44224 ? r44247 : r44254;
double r44256 = r44230 * r44226;
double r44257 = r44256 / r44220;
double r44258 = r44237 * r44257;
double r44259 = r44220 - r44258;
double r44260 = r44239 - r44259;
double r44261 = r44238 / r44260;
double r44262 = r44239 + r44245;
double r44263 = r44262 / r44253;
double r44264 = r44224 ? r44261 : r44263;
double r44265 = r44236 ? r44255 : r44264;
double r44266 = r44222 ? r44234 : r44265;
return r44266;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -8.003368877449752e+118Initial program 52.1
Taylor expanded around -inf 9.5
Taylor expanded around 0 2.9
Simplified2.9
Taylor expanded around inf 2.9
if -8.003368877449752e+118 < b < 1.969094608888965e+161Initial program 8.7
rmApplied add-cube-cbrt8.9
Applied sqrt-prod8.9
Simplified8.9
if 1.969094608888965e+161 < b Initial program 38.3
Taylor expanded around inf 6.2
Final simplification7.6
herbie shell --seed 2020049 +o rules:numerics
(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))))