\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 -63362873442066488610789523456:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - \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}}}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{c \cdot 2}{\mathsf{fma}\left(2, \frac{c}{\frac{b}{a}}, -2 \cdot b\right)}\\
\end{array}\\
\mathbf{elif}\;b \le 63580190853209333432320:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{c \cdot 2}{\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)}\\
\end{array}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;\frac{\mathsf{fma}\left(2, \frac{c}{\frac{b}{a}}, -2 \cdot b\right)}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{c \cdot 2}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} + \left(-b\right)}\\
\end{array}double f(double a, double b, double c) {
double r1109830 = b;
double r1109831 = 0.0;
bool r1109832 = r1109830 >= r1109831;
double r1109833 = -r1109830;
double r1109834 = r1109830 * r1109830;
double r1109835 = 4.0;
double r1109836 = a;
double r1109837 = r1109835 * r1109836;
double r1109838 = c;
double r1109839 = r1109837 * r1109838;
double r1109840 = r1109834 - r1109839;
double r1109841 = sqrt(r1109840);
double r1109842 = r1109833 - r1109841;
double r1109843 = 2.0;
double r1109844 = r1109843 * r1109836;
double r1109845 = r1109842 / r1109844;
double r1109846 = r1109843 * r1109838;
double r1109847 = r1109833 + r1109841;
double r1109848 = r1109846 / r1109847;
double r1109849 = r1109832 ? r1109845 : r1109848;
return r1109849;
}
double f(double a, double b, double c) {
double r1109850 = b;
double r1109851 = -6.336287344206649e+28;
bool r1109852 = r1109850 <= r1109851;
double r1109853 = 0.0;
bool r1109854 = r1109850 >= r1109853;
double r1109855 = -r1109850;
double r1109856 = r1109850 * r1109850;
double r1109857 = 4.0;
double r1109858 = a;
double r1109859 = r1109857 * r1109858;
double r1109860 = c;
double r1109861 = r1109859 * r1109860;
double r1109862 = r1109856 - r1109861;
double r1109863 = sqrt(r1109862);
double r1109864 = sqrt(r1109863);
double r1109865 = r1109864 * r1109864;
double r1109866 = r1109855 - r1109865;
double r1109867 = 2.0;
double r1109868 = r1109858 * r1109867;
double r1109869 = r1109866 / r1109868;
double r1109870 = r1109860 * r1109867;
double r1109871 = r1109850 / r1109858;
double r1109872 = r1109860 / r1109871;
double r1109873 = -2.0;
double r1109874 = r1109873 * r1109850;
double r1109875 = fma(r1109867, r1109872, r1109874);
double r1109876 = r1109870 / r1109875;
double r1109877 = r1109854 ? r1109869 : r1109876;
double r1109878 = 6.358019085320933e+22;
bool r1109879 = r1109850 <= r1109878;
double r1109880 = r1109855 - r1109863;
double r1109881 = r1109880 / r1109868;
double r1109882 = r1109865 + r1109855;
double r1109883 = r1109870 / r1109882;
double r1109884 = r1109854 ? r1109881 : r1109883;
double r1109885 = r1109875 / r1109868;
double r1109886 = r1109863 + r1109855;
double r1109887 = r1109870 / r1109886;
double r1109888 = r1109854 ? r1109885 : r1109887;
double r1109889 = r1109879 ? r1109884 : r1109888;
double r1109890 = r1109852 ? r1109877 : r1109889;
return r1109890;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -6.336287344206649e+28Initial program 23.9
Taylor expanded around -inf 8.2
Simplified5.2
rmApplied add-sqr-sqrt5.2
Applied sqrt-prod5.2
if -6.336287344206649e+28 < b < 6.358019085320933e+22Initial program 9.8
rmApplied add-sqr-sqrt9.8
Applied sqrt-prod10.0
if 6.358019085320933e+22 < b Initial program 33.1
Taylor expanded around inf 10.8
Simplified6.2
Final simplification7.6
herbie shell --seed 2019192 +o rules:numerics
(FPCore (a b c)
:name "jeff quadratic root 1"
(if (>= b 0.0) (/ (- (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)) (/ (* 2.0 c) (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))))))