\begin{array}{l}
\mathbf{if}\;b \ge 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 -5.300564053552496 \cdot 10^{+135}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot \left(\frac{c}{\frac{b}{a}} - b\right)}{2 \cdot a}\\
\end{array}\\
\mathbf{elif}\;b \le 2.019000267824195 \cdot 10^{+87}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{\left(\sqrt[3]{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt[3]{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\right) \cdot \sqrt[3]{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}} \cdot \sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} + \left(-b\right)}{2 \cdot a}\\
\end{array}\\
\mathbf{elif}\;b \ge 0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \mathsf{fma}\left(-2, c \cdot \frac{a}{b}, b\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\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}} + \left(-b\right)}{2 \cdot a}\\
\end{array}double f(double a, double b, double c) {
double r903837 = b;
double r903838 = 0.0;
bool r903839 = r903837 >= r903838;
double r903840 = 2.0;
double r903841 = c;
double r903842 = r903840 * r903841;
double r903843 = -r903837;
double r903844 = r903837 * r903837;
double r903845 = 4.0;
double r903846 = a;
double r903847 = r903845 * r903846;
double r903848 = r903847 * r903841;
double r903849 = r903844 - r903848;
double r903850 = sqrt(r903849);
double r903851 = r903843 - r903850;
double r903852 = r903842 / r903851;
double r903853 = r903843 + r903850;
double r903854 = r903840 * r903846;
double r903855 = r903853 / r903854;
double r903856 = r903839 ? r903852 : r903855;
return r903856;
}
double f(double a, double b, double c) {
double r903857 = b;
double r903858 = -5.300564053552496e+135;
bool r903859 = r903857 <= r903858;
double r903860 = 0.0;
bool r903861 = r903857 >= r903860;
double r903862 = 2.0;
double r903863 = c;
double r903864 = r903862 * r903863;
double r903865 = -r903857;
double r903866 = r903857 * r903857;
double r903867 = 4.0;
double r903868 = a;
double r903869 = r903867 * r903868;
double r903870 = r903869 * r903863;
double r903871 = r903866 - r903870;
double r903872 = sqrt(r903871);
double r903873 = r903865 - r903872;
double r903874 = r903864 / r903873;
double r903875 = r903857 / r903868;
double r903876 = r903863 / r903875;
double r903877 = r903876 - r903857;
double r903878 = r903862 * r903877;
double r903879 = r903862 * r903868;
double r903880 = r903878 / r903879;
double r903881 = r903861 ? r903874 : r903880;
double r903882 = 2.019000267824195e+87;
bool r903883 = r903857 <= r903882;
double r903884 = cbrt(r903872);
double r903885 = r903884 * r903884;
double r903886 = r903885 * r903884;
double r903887 = sqrt(r903886);
double r903888 = sqrt(r903872);
double r903889 = r903887 * r903888;
double r903890 = r903889 + r903865;
double r903891 = r903890 / r903879;
double r903892 = r903861 ? r903874 : r903891;
double r903893 = -2.0;
double r903894 = r903868 / r903857;
double r903895 = r903863 * r903894;
double r903896 = fma(r903893, r903895, r903857);
double r903897 = r903865 - r903896;
double r903898 = r903864 / r903897;
double r903899 = r903888 * r903888;
double r903900 = r903899 + r903865;
double r903901 = r903900 / r903879;
double r903902 = r903861 ? r903898 : r903901;
double r903903 = r903883 ? r903892 : r903902;
double r903904 = r903859 ? r903881 : r903903;
return r903904;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -5.300564053552496e+135Initial program 54.9
Taylor expanded around -inf 9.2
Simplified2.6
if -5.300564053552496e+135 < b < 2.019000267824195e+87Initial program 9.3
rmApplied add-sqr-sqrt9.3
Applied sqrt-prod9.4
rmApplied add-cube-cbrt9.6
if 2.019000267824195e+87 < b Initial program 29.4
rmApplied add-sqr-sqrt29.4
Applied sqrt-prod29.4
Taylor expanded around inf 6.4
Simplified2.6
Final simplification7.0
herbie shell --seed 2019163 +o rules:numerics
(FPCore (a b c)
:name "jeff quadratic root 2"
(if (>= b 0) (/ (* 2 c) (- (- b) (sqrt (- (* b b) (* (* 4 a) c))))) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a))))