\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 -1.155371142473554149515147323663064434117 \cdot 10^{100}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(c \cdot 4\right) \cdot a} \cdot \left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}\\
\mathbf{elif}\;b \le 1.115533706555720825124851768894877421143 \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{\frac{\mathsf{fma}\left(\sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}, \sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}, -b\right)}{2}}{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{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}{2}}{a}\\
\end{array}double f(double a, double b, double c) {
double r36288 = b;
double r36289 = 0.0;
bool r36290 = r36288 >= r36289;
double r36291 = 2.0;
double r36292 = c;
double r36293 = r36291 * r36292;
double r36294 = -r36288;
double r36295 = r36288 * r36288;
double r36296 = 4.0;
double r36297 = a;
double r36298 = r36296 * r36297;
double r36299 = r36298 * r36292;
double r36300 = r36295 - r36299;
double r36301 = sqrt(r36300);
double r36302 = r36294 - r36301;
double r36303 = r36293 / r36302;
double r36304 = r36294 + r36301;
double r36305 = r36291 * r36297;
double r36306 = r36304 / r36305;
double r36307 = r36290 ? r36303 : r36306;
return r36307;
}
double f(double a, double b, double c) {
double r36308 = b;
double r36309 = -1.1553711424735541e+100;
bool r36310 = r36308 <= r36309;
double r36311 = 0.0;
bool r36312 = r36308 >= r36311;
double r36313 = 2.0;
double r36314 = c;
double r36315 = r36313 * r36314;
double r36316 = 4.0;
double r36317 = r36314 * r36316;
double r36318 = a;
double r36319 = r36317 * r36318;
double r36320 = r36315 / r36319;
double r36321 = -r36308;
double r36322 = r36308 * r36308;
double r36323 = r36316 * r36318;
double r36324 = r36323 * r36314;
double r36325 = r36322 - r36324;
double r36326 = sqrt(r36325);
double r36327 = r36321 + r36326;
double r36328 = r36320 * r36327;
double r36329 = 1.0;
double r36330 = r36314 / r36308;
double r36331 = r36308 / r36318;
double r36332 = r36330 - r36331;
double r36333 = r36329 * r36332;
double r36334 = r36312 ? r36328 : r36333;
double r36335 = 1.1155337065557208e+152;
bool r36336 = r36308 <= r36335;
double r36337 = r36321 - r36326;
double r36338 = r36315 / r36337;
double r36339 = sqrt(r36326);
double r36340 = fma(r36339, r36339, r36321);
double r36341 = r36340 / r36313;
double r36342 = r36341 / r36318;
double r36343 = r36312 ? r36338 : r36342;
double r36344 = r36318 * r36314;
double r36345 = r36344 / r36308;
double r36346 = r36313 * r36345;
double r36347 = r36308 - r36346;
double r36348 = r36321 - r36347;
double r36349 = r36315 / r36348;
double r36350 = r36326 - r36308;
double r36351 = r36350 / r36313;
double r36352 = r36351 / r36318;
double r36353 = r36312 ? r36349 : r36352;
double r36354 = r36336 ? r36343 : r36353;
double r36355 = r36310 ? r36334 : r36354;
return r36355;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -1.1553711424735541e+100Initial program 47.4
Simplified47.4
Taylor expanded around -inf 9.9
Simplified9.9
Taylor expanded around 0 3.8
Simplified3.8
rmApplied flip--3.8
Applied associate-/r/3.8
Simplified3.8
if -1.1553711424735541e+100 < b < 1.1155337065557208e+152Initial program 8.5
Simplified8.5
rmApplied add-sqr-sqrt8.5
Applied sqrt-prod8.6
Applied fma-neg8.5
if 1.1155337065557208e+152 < b Initial program 38.5
Simplified38.5
Taylor expanded around inf 7.8
Final simplification7.7
herbie shell --seed 2019322 +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))))