\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.882847547714490435113367324007088134847 \cdot 10^{52}:\\
\;\;\;\;\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{2 \cdot \frac{a \cdot c}{b} - 2 \cdot b}{2 \cdot a}\\
\end{array}\\
\mathbf{elif}\;b \le 4.816123605262117933811755358758786802612 \cdot 10^{98}:\\
\;\;\;\;\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{\left(\sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c} \cdot \sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \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{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt{\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 r31324 = b;
double r31325 = 0.0;
bool r31326 = r31324 >= r31325;
double r31327 = 2.0;
double r31328 = c;
double r31329 = r31327 * r31328;
double r31330 = -r31324;
double r31331 = r31324 * r31324;
double r31332 = 4.0;
double r31333 = a;
double r31334 = r31332 * r31333;
double r31335 = r31334 * r31328;
double r31336 = r31331 - r31335;
double r31337 = sqrt(r31336);
double r31338 = r31330 - r31337;
double r31339 = r31329 / r31338;
double r31340 = r31330 + r31337;
double r31341 = r31327 * r31333;
double r31342 = r31340 / r31341;
double r31343 = r31326 ? r31339 : r31342;
return r31343;
}
double f(double a, double b, double c) {
double r31344 = b;
double r31345 = -1.8828475477144904e+52;
bool r31346 = r31344 <= r31345;
double r31347 = 0.0;
bool r31348 = r31344 >= r31347;
double r31349 = 2.0;
double r31350 = c;
double r31351 = r31349 * r31350;
double r31352 = -r31344;
double r31353 = r31344 * r31344;
double r31354 = 4.0;
double r31355 = a;
double r31356 = r31354 * r31355;
double r31357 = r31356 * r31350;
double r31358 = r31353 - r31357;
double r31359 = sqrt(r31358);
double r31360 = r31352 - r31359;
double r31361 = r31351 / r31360;
double r31362 = r31355 * r31350;
double r31363 = r31362 / r31344;
double r31364 = r31349 * r31363;
double r31365 = 2.0;
double r31366 = r31365 * r31344;
double r31367 = r31364 - r31366;
double r31368 = r31349 * r31355;
double r31369 = r31367 / r31368;
double r31370 = r31348 ? r31361 : r31369;
double r31371 = 4.816123605262118e+98;
bool r31372 = r31344 <= r31371;
double r31373 = cbrt(r31358);
double r31374 = r31373 * r31373;
double r31375 = r31374 * r31373;
double r31376 = sqrt(r31375);
double r31377 = r31352 + r31376;
double r31378 = r31377 / r31368;
double r31379 = r31348 ? r31361 : r31378;
double r31380 = r31344 - r31364;
double r31381 = r31352 - r31380;
double r31382 = r31351 / r31381;
double r31383 = sqrt(r31359);
double r31384 = r31383 * r31383;
double r31385 = r31352 + r31384;
double r31386 = r31385 / r31368;
double r31387 = r31348 ? r31382 : r31386;
double r31388 = r31372 ? r31379 : r31387;
double r31389 = r31346 ? r31370 : r31388;
return r31389;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -1.8828475477144904e+52Initial program 37.8
rmApplied add-sqr-sqrt37.8
Applied sqrt-prod37.9
Taylor expanded around -inf 10.5
if -1.8828475477144904e+52 < b < 4.816123605262118e+98Initial program 9.3
rmApplied add-cube-cbrt9.5
if 4.816123605262118e+98 < b Initial program 28.7
rmApplied add-sqr-sqrt28.7
Applied sqrt-prod28.7
Taylor expanded around inf 6.8
Final simplification9.1
herbie shell --seed 2019298
(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))))