\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 -3.710887557865060611891812934492943223731 \cdot 10^{138}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{\mathsf{fma}\left(4 \cdot c, -a, b \cdot b\right)}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{b \cdot -2}{2}}{a}\\
\end{array}\\
\mathbf{elif}\;b \le 7.691330759470167154555132478550401992059 \cdot 10^{83}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{\mathsf{fma}\left(4 \cdot c, -a, b \cdot b\right)}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(4 \cdot c, -a, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(4 \cdot c, -a, b \cdot b\right)}}, -b\right)}{2}}{a}\\
\end{array}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\mathsf{fma}\left(\frac{a}{\frac{b}{c}}, 2, b \cdot -2\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(4 \cdot c, -a, b \cdot b\right)} - b}{2}}{a}\\
\end{array}double f(double a, double b, double c) {
double r35745 = b;
double r35746 = 0.0;
bool r35747 = r35745 >= r35746;
double r35748 = 2.0;
double r35749 = c;
double r35750 = r35748 * r35749;
double r35751 = -r35745;
double r35752 = r35745 * r35745;
double r35753 = 4.0;
double r35754 = a;
double r35755 = r35753 * r35754;
double r35756 = r35755 * r35749;
double r35757 = r35752 - r35756;
double r35758 = sqrt(r35757);
double r35759 = r35751 - r35758;
double r35760 = r35750 / r35759;
double r35761 = r35751 + r35758;
double r35762 = r35748 * r35754;
double r35763 = r35761 / r35762;
double r35764 = r35747 ? r35760 : r35763;
return r35764;
}
double f(double a, double b, double c) {
double r35765 = b;
double r35766 = -3.7108875578650606e+138;
bool r35767 = r35765 <= r35766;
double r35768 = 0.0;
bool r35769 = r35765 >= r35768;
double r35770 = 2.0;
double r35771 = c;
double r35772 = r35770 * r35771;
double r35773 = -r35765;
double r35774 = 4.0;
double r35775 = r35774 * r35771;
double r35776 = a;
double r35777 = -r35776;
double r35778 = r35765 * r35765;
double r35779 = fma(r35775, r35777, r35778);
double r35780 = sqrt(r35779);
double r35781 = r35773 - r35780;
double r35782 = r35772 / r35781;
double r35783 = -2.0;
double r35784 = r35765 * r35783;
double r35785 = r35784 / r35770;
double r35786 = r35785 / r35776;
double r35787 = r35769 ? r35782 : r35786;
double r35788 = 7.691330759470167e+83;
bool r35789 = r35765 <= r35788;
double r35790 = sqrt(r35780);
double r35791 = fma(r35790, r35790, r35773);
double r35792 = r35791 / r35770;
double r35793 = r35792 / r35776;
double r35794 = r35769 ? r35782 : r35793;
double r35795 = r35765 / r35771;
double r35796 = r35776 / r35795;
double r35797 = fma(r35796, r35770, r35784);
double r35798 = r35772 / r35797;
double r35799 = r35780 - r35765;
double r35800 = r35799 / r35770;
double r35801 = r35800 / r35776;
double r35802 = r35769 ? r35798 : r35801;
double r35803 = r35789 ? r35794 : r35802;
double r35804 = r35767 ? r35787 : r35803;
return r35804;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -3.7108875578650606e+138Initial program 58.5
Simplified58.5
rmApplied add-sqr-sqrt58.5
Applied sqrt-prod58.5
Applied fma-neg58.5
rmApplied add-cube-cbrt58.6
Simplified58.6
Simplified58.6
rmApplied add-cube-cbrt58.6
Simplified58.6
Simplified58.6
Taylor expanded around -inf 2.2
Simplified2.2
if -3.7108875578650606e+138 < b < 7.691330759470167e+83Initial program 8.4
Simplified8.4
rmApplied add-sqr-sqrt8.4
Applied sqrt-prod8.6
Applied fma-neg8.5
if 7.691330759470167e+83 < b Initial program 28.2
Simplified28.2
Taylor expanded around inf 6.7
Simplified2.8
Final simplification6.3
herbie shell --seed 2019174 +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))))