\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 r99474 = b;
double r99475 = -r99474;
double r99476 = r99474 * r99474;
double r99477 = 3.0;
double r99478 = a;
double r99479 = r99477 * r99478;
double r99480 = c;
double r99481 = r99479 * r99480;
double r99482 = r99476 - r99481;
double r99483 = sqrt(r99482);
double r99484 = r99475 + r99483;
double r99485 = r99484 / r99479;
return r99485;
}
double f(double __attribute__((unused)) a, double b, double c) {
double r99486 = -0.5;
double r99487 = c;
double r99488 = b;
double r99489 = r99487 / r99488;
double r99490 = r99486 * r99489;
return r99490;
}



Bits error versus a



Bits error versus b



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