\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 -3.6617740146252804 \cdot 10^{128}:\\
\;\;\;\;\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(2 \cdot \frac{a \cdot c}{b} - b\right)}\\
\end{array}\\
\mathbf{elif}\;b \le 3.6651850726010021 \cdot 10^{84}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\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}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\end{array}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - \left(b - 2 \cdot \frac{a \cdot c}{b}\right)}{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 r45674 = b;
double r45675 = 0.0;
bool r45676 = r45674 >= r45675;
double r45677 = -r45674;
double r45678 = r45674 * r45674;
double r45679 = 4.0;
double r45680 = a;
double r45681 = r45679 * r45680;
double r45682 = c;
double r45683 = r45681 * r45682;
double r45684 = r45678 - r45683;
double r45685 = sqrt(r45684);
double r45686 = r45677 - r45685;
double r45687 = 2.0;
double r45688 = r45687 * r45680;
double r45689 = r45686 / r45688;
double r45690 = r45687 * r45682;
double r45691 = r45677 + r45685;
double r45692 = r45690 / r45691;
double r45693 = r45676 ? r45689 : r45692;
return r45693;
}
double f(double a, double b, double c) {
double r45694 = b;
double r45695 = -3.6617740146252804e+128;
bool r45696 = r45694 <= r45695;
double r45697 = 0.0;
bool r45698 = r45694 >= r45697;
double r45699 = -r45694;
double r45700 = r45694 * r45694;
double r45701 = 4.0;
double r45702 = a;
double r45703 = r45701 * r45702;
double r45704 = c;
double r45705 = r45703 * r45704;
double r45706 = r45700 - r45705;
double r45707 = sqrt(r45706);
double r45708 = r45699 - r45707;
double r45709 = 2.0;
double r45710 = r45709 * r45702;
double r45711 = r45708 / r45710;
double r45712 = r45709 * r45704;
double r45713 = r45702 * r45704;
double r45714 = r45713 / r45694;
double r45715 = r45709 * r45714;
double r45716 = r45715 - r45694;
double r45717 = r45699 + r45716;
double r45718 = r45712 / r45717;
double r45719 = r45698 ? r45711 : r45718;
double r45720 = 3.665185072601002e+84;
bool r45721 = r45694 <= r45720;
double r45722 = cbrt(r45706);
double r45723 = fabs(r45722);
double r45724 = sqrt(r45722);
double r45725 = r45723 * r45724;
double r45726 = r45699 - r45725;
double r45727 = r45726 / r45710;
double r45728 = r45699 + r45707;
double r45729 = r45712 / r45728;
double r45730 = r45698 ? r45727 : r45729;
double r45731 = r45694 - r45715;
double r45732 = r45699 - r45731;
double r45733 = r45732 / r45710;
double r45734 = r45698 ? r45733 : r45729;
double r45735 = r45721 ? r45730 : r45734;
double r45736 = r45696 ? r45719 : r45735;
return r45736;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -3.6617740146252804e+128Initial program 33.7
Taylor expanded around -inf 7.3
if -3.6617740146252804e+128 < b < 3.665185072601002e+84Initial program 8.9
rmApplied add-cube-cbrt9.1
Applied sqrt-prod9.1
Simplified9.1
if 3.665185072601002e+84 < b Initial program 43.2
Taylor expanded around inf 10.1
Final simplification8.9
herbie shell --seed 2020056 +o rules:numerics
(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)))))))