\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 -2.593460638040052 \cdot 10^{+48}:\\
\;\;\;\;\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{a}{b} \cdot c - b\right)}{2 \cdot a}\\
\end{array}\\
\mathbf{elif}\;b \le 0.17389787404847717:\\
\;\;\;\;\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{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt{\sqrt{\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}} \cdot \sqrt{\sqrt[3]{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}{2 \cdot \left(\frac{a}{b} \cdot c - b\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\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 r994857 = b;
double r994858 = 0.0;
bool r994859 = r994857 >= r994858;
double r994860 = 2.0;
double r994861 = c;
double r994862 = r994860 * r994861;
double r994863 = -r994857;
double r994864 = r994857 * r994857;
double r994865 = 4.0;
double r994866 = a;
double r994867 = r994865 * r994866;
double r994868 = r994867 * r994861;
double r994869 = r994864 - r994868;
double r994870 = sqrt(r994869);
double r994871 = r994863 - r994870;
double r994872 = r994862 / r994871;
double r994873 = r994863 + r994870;
double r994874 = r994860 * r994866;
double r994875 = r994873 / r994874;
double r994876 = r994859 ? r994872 : r994875;
return r994876;
}
double f(double a, double b, double c) {
double r994877 = b;
double r994878 = -2.593460638040052e+48;
bool r994879 = r994877 <= r994878;
double r994880 = 0.0;
bool r994881 = r994877 >= r994880;
double r994882 = 2.0;
double r994883 = c;
double r994884 = r994882 * r994883;
double r994885 = -r994877;
double r994886 = r994877 * r994877;
double r994887 = 4.0;
double r994888 = a;
double r994889 = r994887 * r994888;
double r994890 = r994889 * r994883;
double r994891 = r994886 - r994890;
double r994892 = sqrt(r994891);
double r994893 = r994885 - r994892;
double r994894 = r994884 / r994893;
double r994895 = r994888 / r994877;
double r994896 = r994895 * r994883;
double r994897 = r994896 - r994877;
double r994898 = r994882 * r994897;
double r994899 = r994882 * r994888;
double r994900 = r994898 / r994899;
double r994901 = r994881 ? r994894 : r994900;
double r994902 = 0.17389787404847717;
bool r994903 = r994877 <= r994902;
double r994904 = sqrt(r994892);
double r994905 = cbrt(r994891);
double r994906 = r994905 * r994905;
double r994907 = sqrt(r994906);
double r994908 = sqrt(r994905);
double r994909 = r994907 * r994908;
double r994910 = sqrt(r994909);
double r994911 = r994904 * r994910;
double r994912 = r994911 + r994885;
double r994913 = r994912 / r994899;
double r994914 = r994881 ? r994894 : r994913;
double r994915 = r994884 / r994898;
double r994916 = r994892 + r994885;
double r994917 = r994916 / r994899;
double r994918 = r994881 ? r994915 : r994917;
double r994919 = r994903 ? r994914 : r994918;
double r994920 = r994879 ? r994901 : r994919;
return r994920;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -2.593460638040052e+48Initial program 36.3
rmApplied add-sqr-sqrt36.3
Applied sqrt-prod36.4
Taylor expanded around -inf 10.4
Simplified5.3
if -2.593460638040052e+48 < b < 0.17389787404847717Initial program 10.1
rmApplied add-sqr-sqrt10.1
Applied sqrt-prod10.2
rmApplied add-cube-cbrt10.3
Applied sqrt-prod10.3
if 0.17389787404847717 < b Initial program 22.1
rmApplied add-sqr-sqrt22.1
Applied sqrt-prod22.2
Taylor expanded around inf 8.2
Simplified5.4
Final simplification7.6
herbie shell --seed 2019168 +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))))