\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.177741376353205990919022742706386584896 \cdot 10^{137}:\\
\;\;\;\;\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{\mathsf{fma}\left(-2, b, \frac{2}{\frac{b}{a \cdot c}}\right)}{2 \cdot a}\\
\end{array}\\
\mathbf{elif}\;b \le 8.991400549328153943320663038409734113411 \cdot 10^{83}:\\
\;\;\;\;\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{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt{\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}{\mathsf{fma}\left(2, \frac{a \cdot c}{b}, b \cdot -2\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 r781817 = b;
double r781818 = 0.0;
bool r781819 = r781817 >= r781818;
double r781820 = 2.0;
double r781821 = c;
double r781822 = r781820 * r781821;
double r781823 = -r781817;
double r781824 = r781817 * r781817;
double r781825 = 4.0;
double r781826 = a;
double r781827 = r781825 * r781826;
double r781828 = r781827 * r781821;
double r781829 = r781824 - r781828;
double r781830 = sqrt(r781829);
double r781831 = r781823 - r781830;
double r781832 = r781822 / r781831;
double r781833 = r781823 + r781830;
double r781834 = r781820 * r781826;
double r781835 = r781833 / r781834;
double r781836 = r781819 ? r781832 : r781835;
return r781836;
}
double f(double a, double b, double c) {
double r781837 = b;
double r781838 = -1.177741376353206e+137;
bool r781839 = r781837 <= r781838;
double r781840 = 0.0;
bool r781841 = r781837 >= r781840;
double r781842 = 2.0;
double r781843 = c;
double r781844 = r781842 * r781843;
double r781845 = -r781837;
double r781846 = r781837 * r781837;
double r781847 = 4.0;
double r781848 = a;
double r781849 = r781847 * r781848;
double r781850 = r781849 * r781843;
double r781851 = r781846 - r781850;
double r781852 = sqrt(r781851);
double r781853 = r781845 - r781852;
double r781854 = r781844 / r781853;
double r781855 = -2.0;
double r781856 = r781848 * r781843;
double r781857 = r781837 / r781856;
double r781858 = r781842 / r781857;
double r781859 = fma(r781855, r781837, r781858);
double r781860 = r781842 * r781848;
double r781861 = r781859 / r781860;
double r781862 = r781841 ? r781854 : r781861;
double r781863 = 8.991400549328154e+83;
bool r781864 = r781837 <= r781863;
double r781865 = sqrt(r781852);
double r781866 = r781865 * r781865;
double r781867 = r781845 + r781866;
double r781868 = r781867 / r781860;
double r781869 = r781841 ? r781854 : r781868;
double r781870 = r781856 / r781837;
double r781871 = r781837 * r781855;
double r781872 = fma(r781842, r781870, r781871);
double r781873 = r781844 / r781872;
double r781874 = r781852 + r781845;
double r781875 = r781874 / r781860;
double r781876 = r781841 ? r781873 : r781875;
double r781877 = r781864 ? r781869 : r781876;
double r781878 = r781839 ? r781862 : r781877;
return r781878;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -1.177741376353206e+137Initial program 57.9
rmApplied add-sqr-sqrt57.9
Applied sqrt-prod57.9
Taylor expanded around -inf 9.3
Simplified9.3
if -1.177741376353206e+137 < b < 8.991400549328154e+83Initial program 8.4
rmApplied add-sqr-sqrt8.4
Applied sqrt-prod8.6
if 8.991400549328154e+83 < b Initial program 28.2
Taylor expanded around inf 6.7
Simplified6.7
Final simplification8.2
herbie shell --seed 2019174 +o rules:numerics
(FPCore (a b c)
:name "jeff quadratic root 2"
(if (>= b 0.0) (/ (* 2.0 c) (- (- b) (sqrt (- (* b b) (* (* 4.0 a) c))))) (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a))))