\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}-0.5 \cdot \frac{c}{b}double f(double a, double b, double c) {
double r94699 = b;
double r94700 = -r94699;
double r94701 = r94699 * r94699;
double r94702 = 3.0;
double r94703 = a;
double r94704 = r94702 * r94703;
double r94705 = c;
double r94706 = r94704 * r94705;
double r94707 = r94701 - r94706;
double r94708 = sqrt(r94707);
double r94709 = r94700 + r94708;
double r94710 = r94709 / r94704;
return r94710;
}
double f(double __attribute__((unused)) a, double b, double c) {
double r94711 = -0.5;
double r94712 = c;
double r94713 = b;
double r94714 = r94712 / r94713;
double r94715 = r94711 * r94714;
return r94715;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.4
Simplified52.4
Taylor expanded around inf 6.3
Final simplification6.3
herbie shell --seed 2019326
(FPCore (a b c)
:name "Cubic critical, wide range"
:precision binary64
:pre (and (< 4.93038e-32 a 2.02824e+31) (< 4.93038e-32 b 2.02824e+31) (< 4.93038e-32 c 2.02824e+31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))