double f(double a, double b, double c) {
double r1659756 = b;
double r1659757 = 0.0;
bool r1659758 = r1659756 >= r1659757;
double r1659759 = -r1659756;
double r1659760 = r1659756 * r1659756;
double r1659761 = 4.0;
double r1659762 = a;
double r1659763 = r1659761 * r1659762;
double r1659764 = c;
double r1659765 = r1659763 * r1659764;
double r1659766 = r1659760 - r1659765;
double r1659767 = sqrt(r1659766);
double r1659768 = r1659759 - r1659767;
double r1659769 = 2.0;
double r1659770 = r1659769 * r1659762;
double r1659771 = r1659768 / r1659770;
double r1659772 = r1659769 * r1659764;
double r1659773 = r1659759 + r1659767;
double r1659774 = r1659772 / r1659773;
double r1659775 = r1659758 ? r1659771 : r1659774;
return r1659775;
}
double f(double a, double b, double c) {
double r1659776 = b;
double r1659777 = -1.379129228291159e+33;
bool r1659778 = r1659776 <= r1659777;
double r1659779 = 0.0;
bool r1659780 = r1659776 >= r1659779;
double r1659781 = -r1659776;
double r1659782 = r1659776 * r1659776;
double r1659783 = 4.0;
double r1659784 = a;
double r1659785 = r1659783 * r1659784;
double r1659786 = c;
double r1659787 = r1659785 * r1659786;
double r1659788 = r1659782 - r1659787;
double r1659789 = sqrt(r1659788);
double r1659790 = r1659781 - r1659789;
double r1659791 = 2.0;
double r1659792 = r1659791 * r1659784;
double r1659793 = r1659790 / r1659792;
double r1659794 = r1659786 * r1659791;
double r1659795 = r1659784 * r1659786;
double r1659796 = r1659795 / r1659776;
double r1659797 = r1659791 * r1659796;
double r1659798 = r1659797 - r1659776;
double r1659799 = r1659781 + r1659798;
double r1659800 = r1659794 / r1659799;
double r1659801 = r1659780 ? r1659793 : r1659800;
double r1659802 = 2.6164188639732266e+89;
bool r1659803 = r1659776 <= r1659802;
double r1659804 = -4.0;
double r1659805 = r1659804 * r1659784;
double r1659806 = fma(r1659805, r1659786, r1659782);
double r1659807 = sqrt(r1659806);
double r1659808 = r1659781 - r1659807;
double r1659809 = r1659808 / r1659792;
double r1659810 = sqrt(r1659807);
double r1659811 = fma(r1659810, r1659810, r1659781);
double r1659812 = r1659786 / r1659811;
double r1659813 = r1659791 * r1659812;
double r1659814 = r1659780 ? r1659809 : r1659813;
double r1659815 = r1659781 - r1659776;
double r1659816 = r1659815 / r1659792;
double r1659817 = r1659807 - r1659776;
double r1659818 = r1659786 / r1659817;
double r1659819 = r1659791 * r1659818;
double r1659820 = r1659780 ? r1659816 : r1659819;
double r1659821 = r1659803 ? r1659814 : r1659820;
double r1659822 = r1659778 ? r1659801 : r1659821;
return r1659822;
}
\begin{array}{l}
\mathbf{if}\;b \ge 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 -1.379129228291159 \cdot 10^{+33}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{c \cdot 2}{\left(-b\right) + \left(2 \cdot \frac{a \cdot c}{b} - b\right)}\\
\end{array}\\
\mathbf{elif}\;b \le 2.6164188639732266 \cdot 10^{+89}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{(\left(-4 \cdot a\right) \cdot c + \left(b \cdot b\right))_*}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;2 \cdot \frac{c}{(\left(\sqrt{\sqrt{(\left(-4 \cdot a\right) \cdot c + \left(b \cdot b\right))_*}}\right) \cdot \left(\sqrt{\sqrt{(\left(-4 \cdot a\right) \cdot c + \left(b \cdot b\right))_*}}\right) + \left(-b\right))_*}\\
\end{array}\\
\mathbf{elif}\;b \ge 0:\\
\;\;\;\;\frac{\left(-b\right) - b}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;2 \cdot \frac{c}{\sqrt{(\left(-4 \cdot a\right) \cdot c + \left(b \cdot b\right))_*} - b}\\
\end{array}


Bits error versus a



Bits error versus b



Bits error versus c
if b < -1.379129228291159e+33Initial program 23.3
Taylor expanded around -inf 7.4
if -1.379129228291159e+33 < b < 2.6164188639732266e+89Initial program 9.4
Simplified9.4
rmApplied add-sqr-sqrt9.4
Applied sqrt-prod9.5
Applied fma-neg9.5
if 2.6164188639732266e+89 < b Initial program 41.5
Simplified41.5
Taylor expanded around 0 4.6
Final simplification8.0
herbie shell --seed 2019101 +o rules:numerics
(FPCore (a b c)
:name "jeff quadratic root 1"
(if (>= b 0) (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ (* 2 c) (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))))))