\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 -4.739519777490095733488952130644039307968 \cdot 10^{139}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2}{\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{c}}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}\\
\mathbf{elif}\;b \le 5.291645547718113453266834027715248202984 \cdot 10^{102}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\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}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{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}{2 \cdot \frac{a \cdot c}{b} - 2 \cdot b}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r30788 = b;
double r30789 = 0.0;
bool r30790 = r30788 >= r30789;
double r30791 = 2.0;
double r30792 = c;
double r30793 = r30791 * r30792;
double r30794 = -r30788;
double r30795 = r30788 * r30788;
double r30796 = 4.0;
double r30797 = a;
double r30798 = r30796 * r30797;
double r30799 = r30798 * r30792;
double r30800 = r30795 - r30799;
double r30801 = sqrt(r30800);
double r30802 = r30794 - r30801;
double r30803 = r30793 / r30802;
double r30804 = r30794 + r30801;
double r30805 = r30791 * r30797;
double r30806 = r30804 / r30805;
double r30807 = r30790 ? r30803 : r30806;
return r30807;
}
double f(double a, double b, double c) {
double r30808 = b;
double r30809 = -4.7395197774900957e+139;
bool r30810 = r30808 <= r30809;
double r30811 = 0.0;
bool r30812 = r30808 >= r30811;
double r30813 = 2.0;
double r30814 = -r30808;
double r30815 = r30808 * r30808;
double r30816 = 4.0;
double r30817 = a;
double r30818 = r30816 * r30817;
double r30819 = c;
double r30820 = r30818 * r30819;
double r30821 = r30815 - r30820;
double r30822 = sqrt(r30821);
double r30823 = r30814 - r30822;
double r30824 = r30823 / r30819;
double r30825 = r30813 / r30824;
double r30826 = 1.0;
double r30827 = r30819 / r30808;
double r30828 = r30808 / r30817;
double r30829 = r30827 - r30828;
double r30830 = r30826 * r30829;
double r30831 = r30812 ? r30825 : r30830;
double r30832 = 5.291645547718113e+102;
bool r30833 = r30808 <= r30832;
double r30834 = r30813 * r30819;
double r30835 = cbrt(r30821);
double r30836 = fabs(r30835);
double r30837 = sqrt(r30835);
double r30838 = r30836 * r30837;
double r30839 = r30814 - r30838;
double r30840 = r30834 / r30839;
double r30841 = r30814 + r30822;
double r30842 = r30813 * r30817;
double r30843 = r30841 / r30842;
double r30844 = r30812 ? r30840 : r30843;
double r30845 = r30817 * r30819;
double r30846 = r30845 / r30808;
double r30847 = r30813 * r30846;
double r30848 = 2.0;
double r30849 = r30848 * r30808;
double r30850 = r30847 - r30849;
double r30851 = r30834 / r30850;
double r30852 = r30812 ? r30851 : r30830;
double r30853 = r30833 ? r30844 : r30852;
double r30854 = r30810 ? r30831 : r30853;
return r30854;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -4.7395197774900957e+139Initial program 58.8
Taylor expanded around -inf 9.8
Taylor expanded around 0 2.5
Simplified2.5
rmApplied associate-/l*2.5
if -4.7395197774900957e+139 < b < 5.291645547718113e+102Initial program 8.4
rmApplied add-cube-cbrt8.6
Applied sqrt-prod8.6
Simplified8.6
if 5.291645547718113e+102 < b Initial program 29.8
Taylor expanded around -inf 29.8
Taylor expanded around 0 29.8
Simplified29.8
Taylor expanded around inf 6.4
Final simplification7.3
herbie shell --seed 2019212
(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))))