\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 r65772 = b;
double r65773 = -r65772;
double r65774 = r65772 * r65772;
double r65775 = 3.0;
double r65776 = a;
double r65777 = r65775 * r65776;
double r65778 = c;
double r65779 = r65777 * r65778;
double r65780 = r65774 - r65779;
double r65781 = sqrt(r65780);
double r65782 = r65773 + r65781;
double r65783 = r65782 / r65777;
return r65783;
}
double f(double __attribute__((unused)) a, double b, double c) {
double r65784 = -0.5;
double r65785 = c;
double r65786 = b;
double r65787 = r65785 / r65786;
double r65788 = r65784 * r65787;
return r65788;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.7
Simplified52.7
Taylor expanded around inf 6.1
Final simplification6.1
herbie shell --seed 2019325 +o rules:numerics
(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)))