\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 -7.031354366652439074047233382039797740753 \cdot 10^{153}:\\
\;\;\;\;\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) + \left(2 \cdot \frac{a \cdot c}{b} - b\right)}{2 \cdot a}\\
\end{array}\\
\mathbf{elif}\;b \le 1.439486791909314232881662748266490355252 \cdot 10^{54}:\\
\;\;\;\;\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}{\left(-b\right) - \left(b - 2 \cdot \left(\left(\sqrt[3]{\frac{a}{\sqrt[3]{b} \cdot \sqrt[3]{b}} \cdot \frac{c}{\sqrt[3]{b}}} \cdot \sqrt[3]{\frac{a}{\sqrt[3]{b} \cdot \sqrt[3]{b}} \cdot \frac{c}{\sqrt[3]{b}}}\right) \cdot \sqrt[3]{\frac{a}{\sqrt[3]{b} \cdot \sqrt[3]{b}} \cdot \frac{c}{\sqrt[3]{b}}}\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(-b\right) + \left(b - 2 \cdot \frac{a \cdot c}{b}\right)}{2 \cdot a}\\
\end{array}double f(double a, double b, double c) {
double r29842 = b;
double r29843 = 0.0;
bool r29844 = r29842 >= r29843;
double r29845 = 2.0;
double r29846 = c;
double r29847 = r29845 * r29846;
double r29848 = -r29842;
double r29849 = r29842 * r29842;
double r29850 = 4.0;
double r29851 = a;
double r29852 = r29850 * r29851;
double r29853 = r29852 * r29846;
double r29854 = r29849 - r29853;
double r29855 = sqrt(r29854);
double r29856 = r29848 - r29855;
double r29857 = r29847 / r29856;
double r29858 = r29848 + r29855;
double r29859 = r29845 * r29851;
double r29860 = r29858 / r29859;
double r29861 = r29844 ? r29857 : r29860;
return r29861;
}
double f(double a, double b, double c) {
double r29862 = b;
double r29863 = -7.031354366652439e+153;
bool r29864 = r29862 <= r29863;
double r29865 = 0.0;
bool r29866 = r29862 >= r29865;
double r29867 = 2.0;
double r29868 = c;
double r29869 = r29867 * r29868;
double r29870 = -r29862;
double r29871 = r29862 * r29862;
double r29872 = 4.0;
double r29873 = a;
double r29874 = r29872 * r29873;
double r29875 = r29874 * r29868;
double r29876 = r29871 - r29875;
double r29877 = sqrt(r29876);
double r29878 = r29870 - r29877;
double r29879 = r29869 / r29878;
double r29880 = r29873 * r29868;
double r29881 = r29880 / r29862;
double r29882 = r29867 * r29881;
double r29883 = r29882 - r29862;
double r29884 = r29870 + r29883;
double r29885 = r29867 * r29873;
double r29886 = r29884 / r29885;
double r29887 = r29866 ? r29879 : r29886;
double r29888 = 1.4394867919093142e+54;
bool r29889 = r29862 <= r29888;
double r29890 = cbrt(r29878);
double r29891 = r29890 * r29890;
double r29892 = r29891 * r29890;
double r29893 = r29869 / r29892;
double r29894 = r29870 + r29877;
double r29895 = r29894 / r29885;
double r29896 = r29866 ? r29893 : r29895;
double r29897 = cbrt(r29862);
double r29898 = r29897 * r29897;
double r29899 = r29873 / r29898;
double r29900 = r29868 / r29897;
double r29901 = r29899 * r29900;
double r29902 = cbrt(r29901);
double r29903 = r29902 * r29902;
double r29904 = r29903 * r29902;
double r29905 = r29867 * r29904;
double r29906 = r29862 - r29905;
double r29907 = r29870 - r29906;
double r29908 = r29869 / r29907;
double r29909 = r29862 - r29882;
double r29910 = r29870 + r29909;
double r29911 = r29910 / r29885;
double r29912 = r29866 ? r29908 : r29911;
double r29913 = r29889 ? r29896 : r29912;
double r29914 = r29864 ? r29887 : r29913;
return r29914;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -7.031354366652439e+153Initial program 63.9
Taylor expanded around -inf 11.1
if -7.031354366652439e+153 < b < 1.4394867919093142e+54Initial program 9.1
rmApplied add-cube-cbrt9.6
if 1.4394867919093142e+54 < b Initial program 25.8
Taylor expanded around inf 6.6
rmApplied add-cube-cbrt6.6
Applied times-frac3.5
rmApplied add-cube-cbrt3.5
Taylor expanded around inf 3.5
Final simplification8.0
herbie shell --seed 2020002 +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))))