\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le 0.114113106997123639:\\
\;\;\;\;\frac{\frac{{b}^{2} - \left({b}^{2} - \left(3 \cdot a\right) \cdot c\right)}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}{3 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r76670 = b;
double r76671 = -r76670;
double r76672 = r76670 * r76670;
double r76673 = 3.0;
double r76674 = a;
double r76675 = r76673 * r76674;
double r76676 = c;
double r76677 = r76675 * r76676;
double r76678 = r76672 - r76677;
double r76679 = sqrt(r76678);
double r76680 = r76671 + r76679;
double r76681 = r76680 / r76675;
return r76681;
}
double f(double a, double b, double c) {
double r76682 = b;
double r76683 = 0.11411310699712364;
bool r76684 = r76682 <= r76683;
double r76685 = 2.0;
double r76686 = pow(r76682, r76685);
double r76687 = 3.0;
double r76688 = a;
double r76689 = r76687 * r76688;
double r76690 = c;
double r76691 = r76689 * r76690;
double r76692 = r76686 - r76691;
double r76693 = r76686 - r76692;
double r76694 = -r76682;
double r76695 = r76682 * r76682;
double r76696 = r76695 - r76691;
double r76697 = sqrt(r76696);
double r76698 = r76694 - r76697;
double r76699 = r76693 / r76698;
double r76700 = r76699 / r76689;
double r76701 = -0.5;
double r76702 = r76690 / r76682;
double r76703 = r76701 * r76702;
double r76704 = r76684 ? r76700 : r76703;
return r76704;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < 0.11411310699712364Initial program 23.5
rmApplied flip-+23.5
Simplified22.5
if 0.11411310699712364 < b Initial program 46.9
Taylor expanded around inf 9.7
Final simplification11.3
herbie shell --seed 2020043
(FPCore (a b c)
:name "Cubic critical, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e+15) (< 1.11022e-16 b 9.0072e+15) (< 1.11022e-16 c 9.0072e+15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))