\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.32197412018708145 \cdot 10^{53}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - \left(2 \cdot \frac{a}{\frac{b}{c}} - b\right)}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{\left(2 \cdot \frac{a}{\frac{b}{c}} - b\right) - b}\\
\end{array}\\
\mathbf{elif}\;b \le 4.58193200392030278 \cdot 10^{61}:\\
\;\;\;\;\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}{\mathsf{fma}\left(\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}}, \sqrt{\sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c}}, -b\right)}\\
\end{array}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;\frac{\mathsf{fma}\left(2, \frac{a \cdot c}{b}, b \cdot -2\right)}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}\\
\end{array}double f(double a, double b, double c) {
double r58654 = b;
double r58655 = 0.0;
bool r58656 = r58654 >= r58655;
double r58657 = -r58654;
double r58658 = r58654 * r58654;
double r58659 = 4.0;
double r58660 = a;
double r58661 = r58659 * r58660;
double r58662 = c;
double r58663 = r58661 * r58662;
double r58664 = r58658 - r58663;
double r58665 = sqrt(r58664);
double r58666 = r58657 - r58665;
double r58667 = 2.0;
double r58668 = r58667 * r58660;
double r58669 = r58666 / r58668;
double r58670 = r58667 * r58662;
double r58671 = r58657 + r58665;
double r58672 = r58670 / r58671;
double r58673 = r58656 ? r58669 : r58672;
return r58673;
}
double f(double a, double b, double c) {
double r58674 = b;
double r58675 = -2.3219741201870814e+53;
bool r58676 = r58674 <= r58675;
double r58677 = 0.0;
bool r58678 = r58674 >= r58677;
double r58679 = -r58674;
double r58680 = 2.0;
double r58681 = a;
double r58682 = c;
double r58683 = r58674 / r58682;
double r58684 = r58681 / r58683;
double r58685 = r58680 * r58684;
double r58686 = r58685 - r58674;
double r58687 = r58679 - r58686;
double r58688 = r58680 * r58681;
double r58689 = r58687 / r58688;
double r58690 = r58680 * r58682;
double r58691 = r58686 - r58674;
double r58692 = r58690 / r58691;
double r58693 = r58678 ? r58689 : r58692;
double r58694 = 4.581932003920303e+61;
bool r58695 = r58674 <= r58694;
double r58696 = r58674 * r58674;
double r58697 = 4.0;
double r58698 = r58697 * r58681;
double r58699 = r58698 * r58682;
double r58700 = r58696 - r58699;
double r58701 = sqrt(r58700);
double r58702 = r58679 - r58701;
double r58703 = r58702 / r58688;
double r58704 = cbrt(r58700);
double r58705 = r58704 * r58704;
double r58706 = sqrt(r58705);
double r58707 = sqrt(r58704);
double r58708 = fma(r58706, r58707, r58679);
double r58709 = r58690 / r58708;
double r58710 = r58678 ? r58703 : r58709;
double r58711 = r58681 * r58682;
double r58712 = r58711 / r58674;
double r58713 = -2.0;
double r58714 = r58674 * r58713;
double r58715 = fma(r58680, r58712, r58714);
double r58716 = r58715 / r58688;
double r58717 = r58701 - r58674;
double r58718 = r58690 / r58717;
double r58719 = r58678 ? r58716 : r58718;
double r58720 = r58695 ? r58710 : r58719;
double r58721 = r58676 ? r58693 : r58720;
return r58721;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -2.3219741201870814e+53Initial program 25.8
Simplified25.8
Taylor expanded around -inf 7.6
rmApplied associate-/l*3.8
Taylor expanded around -inf 3.8
Simplified3.8
if -2.3219741201870814e+53 < b < 4.581932003920303e+61Initial program 9.1
Simplified9.1
rmApplied add-cube-cbrt9.4
Applied sqrt-prod9.4
Applied fma-neg9.4
if 4.581932003920303e+61 < b Initial program 39.6
Simplified39.6
Taylor expanded around inf 9.5
Simplified9.5
Final simplification7.8
herbie shell --seed 2020045 +o rules:numerics
(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)))))))