\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\begin{array}{l}
\mathbf{if}\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a} \le -20420724.391678445041179656982421875:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(b, b, -\left(b \cdot b - \left(3 \cdot a\right) \cdot c\right)\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 r113680 = b;
double r113681 = -r113680;
double r113682 = r113680 * r113680;
double r113683 = 3.0;
double r113684 = a;
double r113685 = r113683 * r113684;
double r113686 = c;
double r113687 = r113685 * r113686;
double r113688 = r113682 - r113687;
double r113689 = sqrt(r113688);
double r113690 = r113681 + r113689;
double r113691 = r113690 / r113685;
return r113691;
}
double f(double a, double b, double c) {
double r113692 = b;
double r113693 = -r113692;
double r113694 = r113692 * r113692;
double r113695 = 3.0;
double r113696 = a;
double r113697 = r113695 * r113696;
double r113698 = c;
double r113699 = r113697 * r113698;
double r113700 = r113694 - r113699;
double r113701 = sqrt(r113700);
double r113702 = r113693 + r113701;
double r113703 = r113702 / r113697;
double r113704 = -20420724.391678445;
bool r113705 = r113703 <= r113704;
double r113706 = -r113700;
double r113707 = fma(r113692, r113692, r113706);
double r113708 = r113693 - r113701;
double r113709 = r113707 / r113708;
double r113710 = r113709 / r113697;
double r113711 = -0.5;
double r113712 = r113698 / r113692;
double r113713 = r113711 * r113712;
double r113714 = r113705 ? r113710 : r113713;
return r113714;
}



Bits error versus a



Bits error versus b



Bits error versus c
if (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) < -20420724.391678445Initial program 20.9
rmApplied flip-+20.9
Simplified20.3
if -20420724.391678445 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 54.3
Taylor expanded around inf 5.0
Final simplification5.8
herbie shell --seed 2019353 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, wide range"
:precision binary64
:pre (and (< 4.9303800000000003e-32 a 2.02824e+31) (< 4.9303800000000003e-32 b 2.02824e+31) (< 4.9303800000000003e-32 c 2.02824e+31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))