\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.77335457896251558 \cdot 10^{131}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\mathsf{fma}\left(2, \frac{a}{\frac{b}{c}}, -2 \cdot b\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(2, \frac{a}{\frac{b}{c}}, -2 \cdot b\right)}{2 \cdot a}\\
\end{array}\\
\mathbf{elif}\;b \le 5.07293778468317356 \cdot 10^{76}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(\sqrt[3]{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt[3]{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\right) \cdot \sqrt[3]{\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}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\mathsf{fma}\left(2, \frac{a}{\frac{b}{c}}, -2 \cdot 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 r36755 = b;
double r36756 = 0.0;
bool r36757 = r36755 >= r36756;
double r36758 = 2.0;
double r36759 = c;
double r36760 = r36758 * r36759;
double r36761 = -r36755;
double r36762 = r36755 * r36755;
double r36763 = 4.0;
double r36764 = a;
double r36765 = r36763 * r36764;
double r36766 = r36765 * r36759;
double r36767 = r36762 - r36766;
double r36768 = sqrt(r36767);
double r36769 = r36761 - r36768;
double r36770 = r36760 / r36769;
double r36771 = r36761 + r36768;
double r36772 = r36758 * r36764;
double r36773 = r36771 / r36772;
double r36774 = r36757 ? r36770 : r36773;
return r36774;
}
double f(double a, double b, double c) {
double r36775 = b;
double r36776 = -4.7733545789625156e+131;
bool r36777 = r36775 <= r36776;
double r36778 = 0.0;
bool r36779 = r36775 >= r36778;
double r36780 = 2.0;
double r36781 = c;
double r36782 = r36780 * r36781;
double r36783 = a;
double r36784 = r36775 / r36781;
double r36785 = r36783 / r36784;
double r36786 = -2.0;
double r36787 = r36786 * r36775;
double r36788 = fma(r36780, r36785, r36787);
double r36789 = r36782 / r36788;
double r36790 = r36780 * r36783;
double r36791 = r36788 / r36790;
double r36792 = r36779 ? r36789 : r36791;
double r36793 = 5.0729377846831736e+76;
bool r36794 = r36775 <= r36793;
double r36795 = -r36775;
double r36796 = r36775 * r36775;
double r36797 = 4.0;
double r36798 = r36797 * r36783;
double r36799 = r36798 * r36781;
double r36800 = r36796 - r36799;
double r36801 = sqrt(r36800);
double r36802 = r36795 - r36801;
double r36803 = cbrt(r36802);
double r36804 = r36803 * r36803;
double r36805 = r36804 * r36803;
double r36806 = r36782 / r36805;
double r36807 = r36795 + r36801;
double r36808 = r36807 / r36790;
double r36809 = r36779 ? r36806 : r36808;
double r36810 = sqrt(r36801);
double r36811 = r36810 * r36810;
double r36812 = r36795 + r36811;
double r36813 = r36812 / r36790;
double r36814 = r36779 ? r36789 : r36813;
double r36815 = r36794 ? r36809 : r36814;
double r36816 = r36777 ? r36792 : r36815;
return r36816;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -4.7733545789625156e+131Initial program 55.2
Taylor expanded around inf 55.2
Simplified55.2
rmApplied associate-/l*55.2
Taylor expanded around -inf 11.1
Simplified3.3
if -4.7733545789625156e+131 < b < 5.0729377846831736e+76Initial program 8.9
rmApplied add-cube-cbrt9.4
if 5.0729377846831736e+76 < b Initial program 27.7
Taylor expanded around inf 6.6
Simplified6.6
rmApplied associate-/l*3.3
rmApplied add-sqr-sqrt3.3
Applied sqrt-prod3.3
Final simplification7.0
herbie shell --seed 2020042 +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))))