\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\end{array}\begin{array}{l}
\mathbf{if}\;b \le -2.415824536209924848227828718073588940264 \cdot 10^{141}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{2 \cdot \left(\frac{a}{\sqrt[3]{b} \cdot \sqrt[3]{b}} \cdot \frac{c}{\sqrt[3]{b}}\right) - 2 \cdot b}\\
\end{array}\\
\mathbf{elif}\;b \le 4.623731436085776951393488738523920016456 \cdot 10^{144}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\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}}}\\
\end{array}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot \frac{a \cdot c}{b} - 2 \cdot b}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\end{array}double f(double a, double b, double c) {
double r31869 = b;
double r31870 = 0.0;
bool r31871 = r31869 >= r31870;
double r31872 = -r31869;
double r31873 = r31869 * r31869;
double r31874 = 4.0;
double r31875 = a;
double r31876 = r31874 * r31875;
double r31877 = c;
double r31878 = r31876 * r31877;
double r31879 = r31873 - r31878;
double r31880 = sqrt(r31879);
double r31881 = r31872 - r31880;
double r31882 = 2.0;
double r31883 = r31882 * r31875;
double r31884 = r31881 / r31883;
double r31885 = r31882 * r31877;
double r31886 = r31872 + r31880;
double r31887 = r31885 / r31886;
double r31888 = r31871 ? r31884 : r31887;
return r31888;
}
double f(double a, double b, double c) {
double r31889 = b;
double r31890 = -2.415824536209925e+141;
bool r31891 = r31889 <= r31890;
double r31892 = 0.0;
bool r31893 = r31889 >= r31892;
double r31894 = -r31889;
double r31895 = r31889 * r31889;
double r31896 = 4.0;
double r31897 = a;
double r31898 = r31896 * r31897;
double r31899 = c;
double r31900 = r31898 * r31899;
double r31901 = r31895 - r31900;
double r31902 = sqrt(r31901);
double r31903 = r31894 - r31902;
double r31904 = 2.0;
double r31905 = r31904 * r31897;
double r31906 = r31903 / r31905;
double r31907 = r31904 * r31899;
double r31908 = cbrt(r31889);
double r31909 = r31908 * r31908;
double r31910 = r31897 / r31909;
double r31911 = r31899 / r31908;
double r31912 = r31910 * r31911;
double r31913 = r31904 * r31912;
double r31914 = 2.0;
double r31915 = r31914 * r31889;
double r31916 = r31913 - r31915;
double r31917 = r31907 / r31916;
double r31918 = r31893 ? r31906 : r31917;
double r31919 = 4.623731436085777e+144;
bool r31920 = r31889 <= r31919;
double r31921 = cbrt(r31901);
double r31922 = fabs(r31921);
double r31923 = sqrt(r31921);
double r31924 = r31922 * r31923;
double r31925 = r31894 + r31924;
double r31926 = r31907 / r31925;
double r31927 = r31893 ? r31906 : r31926;
double r31928 = r31897 * r31899;
double r31929 = r31928 / r31889;
double r31930 = r31904 * r31929;
double r31931 = r31930 - r31915;
double r31932 = r31931 / r31905;
double r31933 = r31894 + r31902;
double r31934 = r31907 / r31933;
double r31935 = r31893 ? r31932 : r31934;
double r31936 = r31920 ? r31927 : r31935;
double r31937 = r31891 ? r31918 : r31936;
return r31937;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -2.415824536209925e+141Initial program 36.1
Taylor expanded around -inf 6.5
rmApplied add-cube-cbrt6.5
Applied times-frac1.2
if -2.415824536209925e+141 < b < 4.623731436085777e+144Initial program 8.3
rmApplied add-cube-cbrt8.5
Applied sqrt-prod8.5
Simplified8.5
if 4.623731436085777e+144 < b Initial program 59.8
Taylor expanded around inf 10.2
Final simplification7.2
herbie shell --seed 2019325
(FPCore (a b c)
:name "jeff quadratic root 1"
:precision binary64
(if (>= b 0.0) (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ (* 2 c) (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))))))