\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 -2.900769547116861223219498082835437225018 \cdot 10^{46}:\\
\;\;\;\;\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{\mathsf{fma}\left(-2, b, \frac{a}{b} \cdot \left(2 \cdot c\right)\right)}{2 \cdot a}\\
\end{array}\\
\mathbf{elif}\;b \le 0.173897874048477174557802982235443778336:\\
\;\;\;\;\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{\sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \left|\sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c}\right|}{2 \cdot a}\\
\end{array}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \left(b - \frac{a}{b} \cdot \left(2 \cdot c\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{\sqrt{\sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \left|\sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c}\right|} \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 r1203559 = b;
double r1203560 = 0.0;
bool r1203561 = r1203559 >= r1203560;
double r1203562 = 2.0;
double r1203563 = c;
double r1203564 = r1203562 * r1203563;
double r1203565 = -r1203559;
double r1203566 = r1203559 * r1203559;
double r1203567 = 4.0;
double r1203568 = a;
double r1203569 = r1203567 * r1203568;
double r1203570 = r1203569 * r1203563;
double r1203571 = r1203566 - r1203570;
double r1203572 = sqrt(r1203571);
double r1203573 = r1203565 - r1203572;
double r1203574 = r1203564 / r1203573;
double r1203575 = r1203565 + r1203572;
double r1203576 = r1203562 * r1203568;
double r1203577 = r1203575 / r1203576;
double r1203578 = r1203561 ? r1203574 : r1203577;
return r1203578;
}
double f(double a, double b, double c) {
double r1203579 = b;
double r1203580 = -2.900769547116861e+46;
bool r1203581 = r1203579 <= r1203580;
double r1203582 = 0.0;
bool r1203583 = r1203579 >= r1203582;
double r1203584 = 2.0;
double r1203585 = c;
double r1203586 = r1203584 * r1203585;
double r1203587 = -r1203579;
double r1203588 = r1203579 * r1203579;
double r1203589 = 4.0;
double r1203590 = a;
double r1203591 = r1203589 * r1203590;
double r1203592 = r1203591 * r1203585;
double r1203593 = r1203588 - r1203592;
double r1203594 = sqrt(r1203593);
double r1203595 = r1203587 - r1203594;
double r1203596 = r1203586 / r1203595;
double r1203597 = -2.0;
double r1203598 = r1203590 / r1203579;
double r1203599 = r1203598 * r1203586;
double r1203600 = fma(r1203597, r1203579, r1203599);
double r1203601 = r1203584 * r1203590;
double r1203602 = r1203600 / r1203601;
double r1203603 = r1203583 ? r1203596 : r1203602;
double r1203604 = 0.17389787404847717;
bool r1203605 = r1203579 <= r1203604;
double r1203606 = cbrt(r1203593);
double r1203607 = sqrt(r1203606);
double r1203608 = fabs(r1203606);
double r1203609 = r1203607 * r1203608;
double r1203610 = r1203587 + r1203609;
double r1203611 = r1203610 / r1203601;
double r1203612 = r1203583 ? r1203596 : r1203611;
double r1203613 = r1203579 - r1203599;
double r1203614 = r1203587 - r1203613;
double r1203615 = r1203586 / r1203614;
double r1203616 = sqrt(r1203609);
double r1203617 = sqrt(r1203594);
double r1203618 = r1203616 * r1203617;
double r1203619 = r1203587 + r1203618;
double r1203620 = r1203619 / r1203601;
double r1203621 = r1203583 ? r1203615 : r1203620;
double r1203622 = r1203605 ? r1203612 : r1203621;
double r1203623 = r1203581 ? r1203603 : r1203622;
return r1203623;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -2.900769547116861e+46Initial program 37.7
rmApplied add-sqr-sqrt37.7
Applied sqrt-prod37.8
Taylor expanded around -inf 10.6
Simplified5.4
if -2.900769547116861e+46 < b < 0.17389787404847717Initial program 10.3
rmApplied add-cube-cbrt10.5
Applied sqrt-prod10.5
Simplified10.5
if 0.17389787404847717 < b Initial program 22.1
rmApplied add-sqr-sqrt22.1
Applied sqrt-prod22.1
rmApplied add-cube-cbrt22.1
Applied sqrt-prod22.1
Simplified22.1
Taylor expanded around inf 8.2
Simplified5.4
Final simplification7.7
herbie shell --seed 2019168 +o rules:numerics
(FPCore (a b c)
:name "jeff quadratic root 2"
(if (>= b 0.0) (/ (* 2.0 c) (- (- b) (sqrt (- (* b b) (* (* 4.0 a) c))))) (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a))))