\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 -1.325519151108135343753380598918343279627 \cdot 10^{154}:\\
\;\;\;\;\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{\frac{\mathsf{fma}\left(\frac{a \cdot c}{b}, 2, -2 \cdot b\right)}{2}}{a}\\
\end{array}\\
\mathbf{elif}\;b \le 5.031608061939102936286074782173578716838 \cdot 10^{53}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{\left(\sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c} \cdot \sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}{2}}{a}\\
\end{array}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\mathsf{fma}\left(\frac{a \cdot c}{b}, 2, b \cdot -2\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}{2}}{a}\\
\end{array}double f(double a, double b, double c) {
double r30865 = b;
double r30866 = 0.0;
bool r30867 = r30865 >= r30866;
double r30868 = 2.0;
double r30869 = c;
double r30870 = r30868 * r30869;
double r30871 = -r30865;
double r30872 = r30865 * r30865;
double r30873 = 4.0;
double r30874 = a;
double r30875 = r30873 * r30874;
double r30876 = r30875 * r30869;
double r30877 = r30872 - r30876;
double r30878 = sqrt(r30877);
double r30879 = r30871 - r30878;
double r30880 = r30870 / r30879;
double r30881 = r30871 + r30878;
double r30882 = r30868 * r30874;
double r30883 = r30881 / r30882;
double r30884 = r30867 ? r30880 : r30883;
return r30884;
}
double f(double a, double b, double c) {
double r30885 = b;
double r30886 = -1.3255191511081353e+154;
bool r30887 = r30885 <= r30886;
double r30888 = 0.0;
bool r30889 = r30885 >= r30888;
double r30890 = 2.0;
double r30891 = c;
double r30892 = r30890 * r30891;
double r30893 = -r30885;
double r30894 = r30885 * r30885;
double r30895 = 4.0;
double r30896 = a;
double r30897 = r30895 * r30896;
double r30898 = r30897 * r30891;
double r30899 = r30894 - r30898;
double r30900 = sqrt(r30899);
double r30901 = r30893 - r30900;
double r30902 = r30892 / r30901;
double r30903 = r30896 * r30891;
double r30904 = r30903 / r30885;
double r30905 = -2.0;
double r30906 = r30905 * r30885;
double r30907 = fma(r30904, r30890, r30906);
double r30908 = r30907 / r30890;
double r30909 = r30908 / r30896;
double r30910 = r30889 ? r30902 : r30909;
double r30911 = 5.031608061939103e+53;
bool r30912 = r30885 <= r30911;
double r30913 = cbrt(r30899);
double r30914 = r30913 * r30913;
double r30915 = r30914 * r30913;
double r30916 = sqrt(r30915);
double r30917 = r30893 - r30916;
double r30918 = r30892 / r30917;
double r30919 = r30900 - r30885;
double r30920 = r30919 / r30890;
double r30921 = r30920 / r30896;
double r30922 = r30889 ? r30918 : r30921;
double r30923 = r30885 * r30905;
double r30924 = fma(r30904, r30890, r30923);
double r30925 = r30892 / r30924;
double r30926 = r30889 ? r30925 : r30921;
double r30927 = r30912 ? r30922 : r30926;
double r30928 = r30887 ? r30910 : r30927;
return r30928;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -1.3255191511081353e+154Initial program 64.0
Simplified64.0
rmApplied add-sqr-sqrt64.0
Applied sqrt-prod64.0
Taylor expanded around -inf 11.1
Simplified11.1
if -1.3255191511081353e+154 < b < 5.031608061939103e+53Initial program 8.7
Simplified8.7
rmApplied add-cube-cbrt8.9
if 5.031608061939103e+53 < b Initial program 26.3
Simplified26.3
rmApplied add-sqr-sqrt26.3
Applied sqrt-prod26.3
Taylor expanded around inf 7.7
Simplified7.7
Final simplification8.8
herbie shell --seed 2019326 +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))))